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

本文关键字:搜索 字符串 文件 文本 | 更新日期: 2023-09-27 18:34:54

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

假设我在文件中的文本是这样的

第 1 行------------示例文本交易对手="ABCD"详细信息已编程...等等

第 2 行

------------ 这是第 2 行 product="12345" 并继续

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

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

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

string prevLine = "";
while((line = reader.ReadLine()) != null)
{
    if (line.contains("12345"))
    {
        textIWant = prevLine.Substring( //..etc
    }
    prevLine = line;
}
如果您需要返回超过 1 行,

您可以继续相同的模式,但显然如果您需要返回超过 1 或 2 行,它会变得混乱。 如果文件不是那么大,你也可以阅读整个内容并只缓存所有行,但如果文件可能非常大,从而占用大量内存来一次缓存,这将不好。

您可以使用正则表达式(System.Text.RegularExpressions(。首先阅读一大行并将它们连接在一起。然后将它们传递给正则表达式对象的 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 的其他值。