C# - 将文本保存到变量

时间:2018-01-05 10:30:05

标签: c# regex match

我想将.txt文件中的电子邮件地址保存到字符串变量中。这是我的代码:

String path = "C:\\Users\\test.txt";
string from;

var fro = new Regex("from: (?<fr>)");

using (var reader = new StreamReader(File.OpenRead(@path)))
{
    while (true)
    {
        var nextLine = reader.ReadLine();
        if (nextLine == null)
            break;

        var matchb = fro.Match(nextLine);

        if (matchb.Success)
        {
            from = matchb.Groups["fr"].Value;
            Console.WriteLine(from);
        }
    }
}

我知道matchb.Successtrue,但from无法正确显示。我担心这与逃脱序列有关,但我无法在互联网上找到任何有用的东西。

文本文件可能如下所示:

  

LOG 00:01:05 processID = 123456-12345 from:test@test.org
  LOG 00:01:06 processID = 123456-12345 OK

1 个答案:

答案 0 :(得分:2)

您的(?<fr>)模式定义了一个命名组&#34; fr&#34;匹配空字符串。

要使用某些值填充组,您需要定义组模式。

如果您计划与该行的其余部分匹配,则可以使用.*。要匹配一系列非空白字符,请使用\S+。要匹配内部有@的非空白字符序列,请使用\S+@\S+。所有这三种方法都适用于当前的情况。

在C#中,它看起来像

var fro = new Regex(@"from: *(?<fr>\S+@\S+)");

请注意,@"..."是一个逐字字符串文字,其中单个反斜杠定义了一个文字反斜杠,因此您不必将其加倍。我还建议使用*量词来匹配电子邮件之前的0或更多空格。您可能希望使用\s*(匹配任何0+空白字符)或[\p{Zs}\t]*(仅匹配水平空格字符)。