首页 > 解决方案 > 当 regex101 以其他方式显示时,Python 正则表达式不匹配

问题描述

我正在尝试匹配以下模式:

...hello world...foo...bar...在哪里 ”。” 可以是任何字符。此外,它不应包含单词alicebob.

这是我尝试过的:pattern = r'^(?!.*(alice|bob)).*hello world.*foo.*bar'我在 regex101.com 上对其进行了测试,它可以工作,但是当我尝试时re.findall(pattern, "hello world, this is foo and bar"),它显示不匹配。

我对正则表达式很陌生,无法弄清楚哪里出了问题,提前感谢所有帮助!

标签: python-3.xregex

解决方案


re.findall如果有的话,要么返回所有捕获组的列表。如果不是,则返回整个匹配项。

在您的示例(alice|bob)中是一个捕获组,即使它在负前瞻中也是如此。这就是为什么它返回一个list空字符串的原因。在整个模式周围添加括号使其成为您的第一个捕获组。因此将作为列表中的第一个元素返回。

有其他方法可以解决这个问题。您可以删除您的(alice|bob)捕获组并将其替换.*alice|.*bob)为没有捕获组的相同内容。

完整代码:

import re

pattern = r'^(?!.*alice|.*bob).*hello world.*foo.*bar'
print(re.findall(pattern, 'hello world, this is foo and bar'))

推荐阅读