正则表达式从字符串中提取联系人姓名和电子邮件

Fed*_*ust 3 regex string asp-classic

我正在尝试想出一些正则表达式来从字符串中提取姓名和电子邮件地址。

我知道这里有很多关于此的问题,只是浏览了一些,但它们对我不起作用。

这是我到目前为止的正则表达式

([\'(\w\d\s*)\'\s]*)<([a-z\d._%+-]+@[a-z\d.-]+\.[a-z]{2,4}\b)>
Run Code Online (Sandbox Code Playgroud)

字符串可以像

Name Surname email@domain.com

'Name Surname' <email@domain.com>

'Name Surname' email@domain.com

Name Surname <email@domain.com>
Run Code Online (Sandbox Code Playgroud)

所以我想您可以看到 ' 和 < > 都是完全可选的。

我需要它来获取两组结果,一组用于联系人姓名,一组用于电子邮件。

由于公司遗留代码,我正在使用经典的 asp。

谢谢

Wik*_*żew 5

您可以使用

'?(\w+(?:\s+\w+)*)'?\s+<?(\S+@[\w.-]+\.[a-zA-Z]{2,4}\b)
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

图案解释

  • '?- 可选的'
  • (\w+(?:\s+\w+)*)- 第 1 组匹配:
    • \w+- 1 个或多个字母数字/下划线符号
    • (?:\s+\w+)*- 0 个或多个 1+ 空格序列,后跟 1+ 字母数字/下划线符号
  • '?- 可选的'
  • \s+- 1 个或多个空白符号
  • <? - 可选的<
  • (\S+@[\w.-]+\.[a-zA-Z]{2,4}\b)- 第 2 组匹配
    • \S+- 1+ 个非空白符号
    • @- 字面意思@
    • [\w.-]+- 1 个或多个字符:字母数字/下划线、点或连字符
    • \.- 一个字面点
    • [a-zA-Z]{2,4}- 2 至 4 个 ASCII 字母
    • \b- 尾随字边界

  • 使用 [`'?(\w+(?:\s+\w+)*)?'?\s*&lt;?(\S+@[\w.-]+\.[a-zA-Z]{2,4 }\b)`](https://regex101.com/r/jV4vO1/2)。 (2认同)