0

我创建了一个小控制台程序,它将搜索文本文件并返回与用户输入的变量匹配的所有字符串行。我遇到的一个问题是,假设我想查找代表位置代码的“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

我会说你在正确的轨道上。

我建议更改正则表达式,以便它使用否定的lookbehind来匹配前面没有“-”的“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);
   }  
  }
 }
}

测试这些(通常很棘手!)正则表达式的好网站是Regex Hero

于 2013-10-08T01:20:27.563 回答
0

使用 Linq to CSV 让您的生活更轻松。只需转到 Nuget 并搜索 Linq 到 CSV。

于 2013-10-07T23:58:49.293 回答