我想我需要使用一个替代构造,但我不能让它工作。如何将此逻辑转换为一个正则表达式模式?
match = Regex.Match(message2.Body, @"\r\nFrom: .+\(.+\)\r\n");
if (match.Success)
match = Regex.Match(message2.Body, @"\r\nFrom: (.+)\((.+)\)\r\n");
else
match = Regex.Match(message2.Body, @"\r\nFrom: ()(.+)\r\n");
编辑:
一些示例案例应该有助于解决您的问题
From: email
和
From: name(email)
这是两种可能的情况。我想匹配它们,所以我可以做到
string name = match.Groups[1].Value;
string email = match.Groups[2].Value;
欢迎提出不同方法的建议! 谢谢!
答案 0 :(得分:3)
这就是你要求的:"(?=" + regex1 + ")" + regex2 + "|" + regex3
match = Regex.Match(message.Body, @"(?=\r\nFrom: (.+\(.+\))\r\n)\r\nFrom: (.+)\((.+)\)\r\n|\r\nFrom: ()(.+)\r\n");
但我认为这不是你想要的。
使用.net的Regex,您可以命名这样的组:(?<name>regex)
。
match = Regex.Match(message.Body, @"\r\nFrom: (?<one>.+)\((?<two>.+)\)\r\n|\r\nFrom: (?<one>)(?<two>.+)\r\n");
Console.WriteLine (match.Groups["one"].Value);
Console.WriteLine (match.Groups["two"].Value);
但是,您的\r\n
可能不对。这将是文字rnFrom:
。试试这个。
match = Regex.Match(message.Body, @"^From: (?:(?<one>.+)\((?<two>.+)\)|(?<one>)(?<two>.+))$");
Console.WriteLine (match.Groups["one"].Value);
Console.WriteLine (match.Groups["two"].Value);