【发布时间】:2018-06-15 03:39:26
【问题描述】:
我想将 .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 来自:test@test.org
LOG 00:01:06 processID=123456-12345 OK
【问题讨论】:
-
看起来您忘记定义命名组模式,如果您需要匹配
from:之后的所有其余行,请尝试"from: (?<fr>.*)"。如果电子邮件只有 1 个或多个非空格,您可以使用\S+。为确保存在@,您可以使用\S+@\S+而不是.*(在代码中,使用@"from: *(?<fr>\S+@\S+)")。 -
你不应该使用c# keyword作为变量名。
-
@TobiasTheel:它只是一个 contextual 关键字,在许多情况下它可能是最合适的变量名。对于查询表达式中的上下文关键字,我会尽量避免使用以这种方式命名的变量在查询表达式中,否则我认为这不是一个重大问题。
-
@TobiasTheel:但是 OP 没有得到任何以 C# 关键字命名的变量。他有一个与 contextual 关键字同名的变量,并且他没有在查询表达式中使用它,所以我认为它没有问题。