0

テキスト ファイルを検索し、ユーザーが入力した変数に一致するすべての文字列行を返す小さなコンソール プログラムを作成しました。私が遭遇した問題の 1 つは、場所コードを表す "1234" を検索したいのですが、文字列行に "555-1234" を含む電話番号もあるとします。変数 (",1234,") に区切り文字 (例: ",") を入力すると、検索が正確になるのではないかと考えています。私は正しい軌道に乗っていますか、それとももっと良い方法がありますか? これは私が今のところいるところです:

string[] file = File.ReadAllLines(sPath);  
    foreach (string s in file) 
    {
       using (StreamWriter sw = File.AppendText(rPath))
       {  
           if (sFound = Regex.IsMatch(s, string.Format(@"\b{0}\b", 
               Regex.Escape(searchVariable))))
           {
               sw.WriteLine(s);
           }  
       }
    } 
4

2 に答える 2

0

あなたは正しい軌道に乗っていると言えます。

「-」が前に付いていない「searchVariable」に一致する否定後読みを使用するように正規表現を変更することをお勧めします。そのため、 「555-1234」の「1234」は一致しませんが、「,1234」 (例えば)でしょう。

検索に特殊な正規表現文字を含めたい場合にのみ、 「Regex.Escape()」を使用する必要があります。これは、質問からはしたくないことです。

コードを次のように変更できます (遅いのでテストしていません!):

var lines= File.ReadAllLines(sPath);
var regex = new Regex(String.Format("(?<!-){0}\b", searchVariable));

if (lines.Any())
{
 using (var streamWriter = File.AppendText(rPath))
 {    
  foreach (var line in lines) 
  {
   if (regex.IsMatch(line))
   {
    streamWriter.WriteLine(line);
   }  
  }
 }
}

これらの (しばしばトリッキーな!) 正規表現をテストするための優れた Web サイトは、Regex Heroです。

于 2013-10-08T01:20:27.563 に答える