2017-01-05 17 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) 

... = int型の位置の後にこれを追加する必要が

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

部分一致では実際には機能しません –

+0

彼は正規表現を使用していないか、または正規表現を示していません。 'IndexOf'の種類は完全一致を示し、正規表現などとの部分一致は '一致'を示します。 var regexPercent =新しい正規表現( "^(?!。{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]}"); 
}   

MatchコンストラクタでRegexOption.IgnoreCase\b私を追加するとともに、適切なように見えましたn部分一致を制限する式。

関連する問題