我想将.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.Success
为true
,但from
无法正确显示。我担心这与逃脱序列有关,但我无法在互联网上找到任何有用的东西。
文本文件可能如下所示:
LOG 00:01:05 processID = 123456-12345 from:test@test.org
LOG 00:01:06 processID = 123456-12345 OK
答案 0 :(得分:2)
您的(?<fr>)
模式定义了一个命名组&#34; fr&#34;匹配空字符串。
要使用某些值填充组,您需要定义组模式。
如果您计划与该行的其余部分匹配,则可以使用.*
。要匹配一系列非空白字符,请使用\S+
。要匹配内部有@
的非空白字符序列,请使用\S+@\S+
。所有这三种方法都适用于当前的情况。
在C#中,它看起来像
var fro = new Regex(@"from: *(?<fr>\S+@\S+)");
请注意,@"..."
是一个逐字字符串文字,其中单个反斜杠定义了一个文字反斜杠,因此您不必将其加倍。我还建议使用*
量词来匹配电子邮件之前的0或更多空格。您可能希望使用\s*
(匹配任何0+空白字符)或[\p{Zs}\t]*
(仅匹配水平空格字符)。