我有几个电子邮件地址, '[email protected]'
和 '[email protected]'
。
在 perl 中,我可以使用原始电子邮件的 To:
行并找到上述地址之一
/\w+@(tickets\.)?company\.com/i
在 python 中,我只是将上面的正则表达式写成
'\w+@(tickets\.)?company\.com'
期望得到相同的结果。但是,根本找不到 [email protected]
并且第二个的 findall 返回一个仅包含 'tickets.'
的列表。很明显 '(tickets\.)?'
是问题区域,但是我缺少的 Perl 和 Python 之间的正则表达式规则到底有什么区别? 最佳答案
re.findall
的文档:
由于 (tickets\.)
是一个组,因此 findall
返回的是该组而不是整个匹配项。如果您想要整个匹配,请在整个模式周围放置一个组和/或使用非分组匹配,即
r'(\w+@(tickets\.)?company\.com)'
r'\w+@(?:tickets\.)?company\.com'
请注意,在第一种情况下,您必须选择
findall
返回的每个元组的第一个元素。关于python - Perl 和 Python 之间正则表达式行为的差异?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/757476/