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