我必须编写一个正则表达式来从句子中获取电子邮件地址。我希望仅将其与第 1 组一起退回。
正则表达式:
\[mailto:(.+)\]|<(.+@.+\..+)>
输入字符串:
Hello my Email Address is <[email protected]> - Return [email protected] as Group1.
Hello my Email Address is [mailto: [email protected]] - Return [email protected] as Group2.
我希望如果任何字符串匹配,那么它应该在 Group1 中返回。
有什么办法可以做到这一点吗?
您可以使用正则表达式:
(?=\S+@)([^<\s]+@.*(?=[>\]]))
(?=\S+@)
正向前瞻,断言后面是任何非空白字符,后跟 @
。([^<\s]+@.*(?=[>\]]))
捕获群体。捕获任何非空格、非 ^
字符,后跟 @
,以及 ]
或 >
字符之前的任何内容。您可以在这里测试正则表达式。
您可以首先匹配
<
并断言它以 ..>
结尾,或者匹配 [mailto:
并断言它以 ]
结尾
(?:<(?=[^<>]*>)|\[mailto:\s*(?=[^][]*]))([^\s@]+@[^\s@]+\.\w{2,})
(?:
替代方案的非捕获组
<(?=[^<>]*>)
匹配 <
并断言 ...>
且不出现 `<|
\[mailto:\s*
(?=
[^][]*]
)
)
关闭非捕获组(
捕获第 1 组
[^\s@]+
匹配除 @ 或空白字符之外的 1 个以上字符@
匹配@[^\s@]+\.\w{2,}
匹配 @ 以外的 1 个以上字符或空格字符后跟一个点和 2 个或更多单词字符(您可以根据需要使 TLD 更具体))
关闭第 1 组TLd
查看 正则表达式演示