使用/ delimiter字符搜索字符串

时间:2013-10-07 22:47:35

标签: c# regex file-io filestream

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

2 个答案:

答案 0 :(得分:0)

使用Linq CSV,让您的生活更轻松。只需前往Nuget并将Linq搜索为CSV。

答案 1 :(得分:0)

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

我建议更改正则表达式,以便它使用negative 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