我有这个正则表达式@"/([^<]+)\s<(.*)>/"
来匹配C#中此字符串的名称和电子邮件地址:
John Doe <john.doe@gmail.com>
如果我使用Regex.Match("John Doe <john.doe@gmail.com>", @"/([^<]+)\s<(.*)>/")
结果的属性是什么,它返回集合中的名称和电子邮件地址?我查看了群组和捕获,但都没有返回正确的结果。
感谢。
答案 0 :(得分:4)
您需要先删除正则表达式分隔符。见this post explaining that issue。
var match = Regex.Match("John Doe <john.doe@gmail.com>", @"([^<]+)\s<(.*)>");
然后,您可以分别通过match.Groups[1].Value
和match.Groups[2].Value
获取姓名和电子邮件。
但是,最好使用命名捕获组:
var match = Regex.Match("John Doe <john.doe@gmail.com>", @"(?<name>[^<]+)\s<(?<mail>.*)>");
然后,您可以使用match.Groups["name"].Value
和match.Groups["mail"].Value
访问这些值。
还有一个关于模式的说明:如果电子邮件不包含>
也不包含<
,我建议在那里使用否定字符类[^<>]
(匹配任何字符但是<
和>
):
(?<name>[^<]+)\s<(?<mail>[^<>]*)>
答案 1 :(得分:2)
替代:
var m = new System.Net.Mail.MailAddress(@"John Doe <john.doe@gmail.com>");
Console.WriteLine(m.DisplayName);
Console.WriteLine(m.Address);
答案 2 :(得分:0)
您可以为捕获组命名:
(?<name>[^<]+)\s<(?<email>.*)>
然后你可以像这样使用它:
var match = Regex.Match("John Doe <john.doe@gmail.com>", @"(?<name>[^<]+)\s<(?<email>.*)>");
var name = match.Groups["name"];
var email = match.Groups["email"];