我有几个电子邮件地址, '[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/

10-09 14:59