Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 搜索带分隔符的字符串_C#_Regex_File Io_Filestream - Fatal编程技术网

C# 搜索带分隔符的字符串

C# 搜索带分隔符的字符串,c#,regex,file-io,filestream,C#,Regex,File Io,Filestream,我创建了一个小控制台程序,它将搜索文本文件并返回与用户输入的变量匹配的所有字符串行。我遇到的一个问题是,假设我想查找代表位置代码的“1234”,但还有一个电话号码的字符串行中有“555-1234”,我也得到了那个号码。我在想,如果我用变量(“,1234,”)输入分隔符(例如:“,”),那么也许我可以确保搜索是准确的。我是走对了路,还是有更好的办法?这就是我目前的处境: string[] file = File.ReadAllLines(sPath); foreach (string

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

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

我认为您的做法是正确的

我建议更改正则表达式,以便它使用一个匹配“searchVariable”的变量,该变量不以“-”开头,因此“555-1234”中的“1234”不会匹配,但“1234”(例如)会匹配

仅当您希望在搜索中包含特殊的正则表达式字符时才需要使用,而您的问题中不希望这样做

您可以将代码更改为类似这样的内容(已经很晚了,所以我还没有测试它!):

var lines=File.ReadAllLines(sPath);

var regex=new regex(String.Format(“(?您有CSV文件吗?大部分都是CSV文件,但有时我会遇到管道文件或^delimited文件,因此我可能会让用户在开始时输入分隔符。使用Linq to CSV,让您的生活更轻松。只需转到Nuget并搜索Linq to CSV。@jcwrequests您可能应该将其添加为答案:)如何将用户输入的变量与正则表达式变量合并?@user2836200我已经更新了正则表达式,因此用户输入的变量现在包括在内。我还修改了正则表达式,以便“555-1234”中的“-”不匹配,但“1234”(例如)Wild.EEK!我忘了添加String.Format,这就是为什么添加变量对我不起作用的原因。我感谢您的反馈,但即使是更新的正则表达式,如果它包含例如“32541234,“在字符串行中。我认为如果我只能匹配分隔符之间的内容,那么每次都是准确的。我刚刚意识到可以在正则表达式中使用分隔符(string.Format(“,\b{0}\b,”,searchVariable))…这似乎解决了我的问题,至少对CSV文件是这样。现在我只需要对管道&^分隔文件执行同样的操作。再次感谢您的帮助!!@Mikem很好的消息,您的问题已经解决。很高兴我能提供帮助。我对编写代码还不熟悉,所以我在linq中查找CSV,但我不知道如何处理它。检查o请点击此链接。
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);
   }  
  }
 }
}