如何在 C# 中将字符串与正则表达式匹配

本文关键字:正则表达式 字符串 | 更新日期: 2023-09-27 17:55:18

我有这个字符串Sample Text <test@test.com>这个字符串,这个字符串test@test.com,我正在尝试匹配前面的文本(本例中的"示例文本")如果存在和没有"<",">"字符的电子邮件。之前和之后可能有空格。起初我用这个表达式使用 Regex.Split @"'s*(.*)<(.*@.*)>'s*"但它给了我 4 个字符串而不是 2 个。我想要的 2 个字符串是正确的,但它也返回空字符串。现在我正在尝试使用此表达式使用 Regex.Matchs,@"'s*(.*)(?: <)?(.*@.*)(?:>)?'s*"它找到了 3 个匹配项。2 再次是正确的,另一个是输入字符串本身。至于第二个字符串,它不起作用。我该如何解决这个问题?

如何在 C# 中将字符串与正则表达式匹配

这可以在没有正则表达式的情况下完成。看看MailAddress课;它可用于解析字符串,如您的示例所示:

var mailAddress = new MailAddress("Sample Text <test@test.com>");

在这里mailAddress.Address属性将包含test@test.com值,mailAddress.DisplayName将包含Sample Text值。

根据您的测试用例,此正则表达式可能有效。

(.*)'s?'<(.*)'>

这将为您提供结果 1 前面的文本和 2 包含在<>括号内的文本

如果您关心确保电子邮件有效,您可能希望查看更全面的电子邮件正则表达式,但我猜您正在尝试匹配来自电子邮件或邮件服务器的字符串,因此这可能不是问题。

此外,值得抓住正则表达式构建程序,例如 Expresso 或使用众多在线工具之一来帮助构建您的正则表达式。

Regex.Matches 总是返回第一个匹配项的完整匹配项,因此只需忽略它并使用第二个和第三个匹配项。

要匹配第二

种类型的字符串(仅电子邮件),您最好匹配第一种类型,如果未找到,请使用单个电子邮件正则表达式匹配第二种类型。

在这里试试这个

's*(.*?)(?: <)?('S*@.*)(?:>)?'s*

我只改变了你的一点点。

  1. 将 ? 添加到第一组中,以使其成为惰性匹配

  2. @前面的部分更改为'S,除了空格之外,什么都意味着什么。

您可以在Rubular上在线查看它