我试图将电子邮件地址中@字符之前的本地部分与以下内容匹配:
LOCAL_RE_NOTQUOTED = """
((
\w # alphanumeric and _
| [!#$%&'*+-/=?^_`{|}~] # special chars, but no dot at beginning
)
(
\w # alphanumeric and _
| [!#$%&'*+-/=?^_`{|}~] # special characters
| ([.](?![.])) # negative lookahead to avoid pairs of dots.
)*)
(?<!\.)(?:@) # no end with dot before @
"""
使用以下内容进行测试:
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).group()
给出:
'a.a..a@'
为什么输出中会打印出@
,即使我使用了非捕获组(?:@)
?
测试代码:
re.match(LOCAL_RE_NOTQUOTED, "a.a..a@", re.VERBOSE).groups()
提供:
('a.a..a', 'a', 'a', None)
为什么正则表达式没有拒绝具有两个点
'..'
的字符串?
/([\S]+)@/g
,然后在下一步过滤输出中不需要的垃圾数据会更容易些。 - Jakub M.#
字符不应该被转义吗?(代码的第4行和第8行) - Jakub M.