在c#中的文本文件中搜索多个字符串

时间:2013-10-10 21:33:59

标签: c#

想要搜索文件中的字符串,一旦找到,我想先前去搜索不同的字符串,最后得到该字符串的尾随字符。

我们说文件中的文字就像

第1行------------示例文本对方=“ABCD”详细编程...等等

第2行------------这是第二行产品=“12345”并继续

我想首先搜索12345,这是唯一的。一旦找到,我想转到前一行并搜索首次出现的交易对手,一旦发现我想捕获字符串ABCD

2 个答案:

答案 0 :(得分:2)

您可以在每次迭代之前缓存该行:

string prevLine = "";
while((line = reader.ReadLine()) != null)
{
    if (line.contains("12345"))
    {
        textIWant = prevLine.Substring( //..etc
    }
    prevLine = line;
}

如果你需要回到1行以上,你可以继续使用相同的模式,但是如果你需要返回1或2以上它显然会变得混乱。如果文件不是那么大,你也可以阅读整个事情,只是缓存所有行,但如果文件可能非常大并因此占用大量内存来同时缓存所有行,这将不会很好。

答案 1 :(得分:0)

您可以使用正则表达式(System.Text.RegularExpressions)。首先阅读一大堆行并将它们连接在一起。然后将它们传递给Regex对象的Match方法。

假设你想回三行,你可以做这样的事情。

Regex RX = new Regex(@"counterparty=""([^""]*)"" (.*?\n){3}product=""12345""",
       RegexOptions.Singleline | RegexOptions.IgnoreCase);

Match M = RX.Match(YourString);

if (M.Success)
     strCounterParty = M.Result("${1}");  //Returns the value between the 1st set of ()'s

这样您只会匹配产品编号,而不会匹配恰好是12345的其他值。