从像这样的字符串中提取全名的正则表达式是什么?
string = "Jim jim@example.com John Doe john@doe.com Dr. Jane Doe jane3@doe.co Jeff H. P. O'Doe jeff.h@doe_doe.fm"
我需要结果:
Jim, John Doe, Dr. Jane Doe, Jeff H. P. O'Doe
如果电子邮件放在括号中,我已经找到了解决方案,但在这种情况下,电子邮件不在括号中。
这是我目前的进展:
/\b(?<!@)([a-zA-Z'.]+\s[a-zA-Z'.]+\s[a-zA-Z'.]+(?!@)\b|[a-zA-Z'.]+\s[a-zA-Z'.]+(?!@)\b)/
这不是很好,因为它只会考虑两到三个字长的名字,它仍会捕获.com或.whatever来自电子邮件。
答案 0 :(得分:1)
诀窍:分裂与匹配
如果您尝试匹配文本,这是其中一个难以理解的问题。诀窍是匹配电子邮件和相邻的空格,并分开。您可以使用此正则表达式进行拆分:
(?i)\s*\b[A-Z0-9._%+-]+@[A-Z0-9.-_]+\.[A-Z]{2,6}\b\s*
\s*
以占用任何额外的空格。由于您与语言无关,因此在PHP中,请按照以下方式使用它:
$result = preg_split('/(?i)\s*\b[A-Z0-9._%+-]+@[A-Z0-9.-_]+\.[A-Z]{2,6}\b\s*/im', $str, 0);
如果您有任何问题,请与我们联系。
答案 1 :(得分:0)
使用此正则表达式;
[a-zA-Z.'\s]+(?=\s[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-_]+\.[a-zA-Z0-9-.]+\s*\K)
一个小错误是它与名字不匹配。也许你可以弄清楚什么是错的。