2017-01-05 3 views
-1

У меня в настоящее время есть метод, который я создаю, который проходит через текстовый файл с помощью streamreader. Я хочу использовать либо регулярное выражение, либо нечто подобное, чтобы изменить текущий метод, который вы увидите здесь чуть ниже.Конкретное извлечение слов из текстового файла C#

using (StreamReader fs = File.OpenText(FilePath)) 
    { 

     int count = 0; //counts the number of times wordResponse is found. 
     int lineNumber = 0; 
     while (!fs.EndOfStream) 
     { 
      string line = fs.ReadLine(); 
      lineNumber++; 
      int position = line.IndexOf(WordSearch); 
      if (position != -1) 
      { 
       count++; 
       Console.WriteLine("Match#{0} line {1}: {2}", count, lineNumber, line); 
      } 
     } 

     if (count == 0) 
     { 
      Console.WriteLine("your word was not found!"); 
     } 
     else 
     { 
      Console.WriteLine("Your word was found " + count + " times!"); 
     } 
     Console.WriteLine("Press enter to quit."); 
     Console.ReadKey(); 
    } 

выход я получаю от текущего метода:

Match#1 line 3: Proin eleifend tortor velit, **True** quis aliquam arcu congue ut. Fusce sed mattis purus, sed vehicula diam. Nullam in leo sit amet massa pharetra semper et vel diam. 
Match#2 line 7: lobortis nisl. Fusce dignissim ligula **True** a nunc maximus, vitae sollicitudin erat dictum. Vivamus commodo massa a tellus gravida posuere. 
Match#3 line 17: **True** Sed pellentesque ipsum vel neque accumsan, quis fermentum augue pretium. Praesent fermentum risus nec ultricies sodales. 
Match#4 line 24: Fusce nulla risus, ornare in eleifend id, **True** tincidunt eu sem. Donec enim sapien, rhoncus vitae ex lobortis, sagittis molestie libero. 
Your word was found 4 times! 
Press enter to quit. 

Как вы можете видеть, я получаю всю строку кода, когда все, что я хочу, это одно слово из каждого предложения. Слово это ищет прямо сейчас Правда

Я считаю, что это строка string line = fs.ReadLine(); я должен манипулировать несколько дополнительных шагов, чтобы получить результат я хочу.

Любые советы или указатели будут оценены по достоинству.

+0

Не могли бы вы уточнить, что вы ищете? –

+0

«Все, что я хочу, это одно слово из каждого предложения». - Какое слово ... слово, которое вы ищете? –

+0

@ RyanSearle Слово, введенное вручную ранее в программе. Он просматривает каждую строку файла **, которую вы даете в качестве входного **, и ищет конкретное слово **, которое вы указываете в качестве входного слова **, слово, которое оно ищет прямо сейчас, верно, поскольку я отредактирую жирным шрифтом в вопрос. – Hangfish

ответ

1

Он это так же просто, как .....?

Console.WriteLine("Match#{0} line {1}: {2}", count, lineNumber, WordSearch); 
+0

Я думаю, что проблема заключается в частичном сопоставлении ... –

+0

Да, кажется, что это правильно. – Hangfish

0

Вам просто нужно добавить это после того, как ИНТ положение = ...

var word = line.SubString(position, Word.Length) 

Тогда

Console.WriteLine("Match#{0} line {1}: {2}", count, lineNumber, word); 
+0

На самом деле не работает с частичным соответствием –

+0

Он не использует или не указывает регулярное выражение. Тип «IndexOf» показывает точное соответствие, частичное совпадение с регулярным выражением или аналогичным отображением «match». Пример: «var regexPercent = New Regex («^(?!. {8,}) [0-9] {1,3} (?:,? [0-9] {3}) * $ ") Если! RegexPercent.Match (textValue) .Success (сделать что-то) ' – djangojazz

0

Я хочу использовать либо регулярное выражение или нечто подобное ...

Поскольку вы уже заинтересованы в смене текущей реализации использовать регулярное выражение, которое я буду предлагать этот фрагмент кода:

var matches = Regex.Match(line, $".*({WordSearch})\\b.*", RegexOptions.IgnoreCase); 
if (matches.Captures.Count > 0) 
{ 
    count++; 
    Console.WriteLine($"Match#{count} line {lineNumber}: {matches.Groups[1]}"); 
}   

RegexOption.IgnoreCase в Match конструктору представляется целесообразным наряду с добавлением \b я n выражение для ограничения частичных совпадений.