python-3.x - 当 regex101 以其他方式显示时,Python 正则表达式不匹配
问题描述
我正在尝试匹配以下模式:
...hello world...foo...bar...
在哪里 ”。” 可以是任何字符。此外,它不应包含单词alice
和bob
.
这是我尝试过的:pattern = r'^(?!.*(alice|bob)).*hello world.*foo.*bar'
我在 regex101.com 上对其进行了测试,它可以工作,但是当我尝试时re.findall(pattern, "hello world, this is foo and bar")
,它显示不匹配。
我对正则表达式很陌生,无法弄清楚哪里出了问题,提前感谢所有帮助!
解决方案
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'))
推荐阅读
- ios - 斯威夫特 5 | UINavigationController 直到进入 DetailsViewController 才出现
- r - R data.table fread select与部分字符串匹配?
- python - Python:求数字的平均值
- javascript - 为什么这个函数在 React Native 中返回 false?
- html - Bulma 中的列是水平放置的,我们可以固定一行中的列数并在另一行中休息吗?
- swift - 你如何测试一个 observable 在失败时是否重试 X 次?
- c# - 当我们可以有数百个对象时,在 C# 中初始化多个实例及其属性的最简单方法是什么?
- ruby-on-rails - ruby on rails - 命名空间问题
- r - 在插入符号包中:当使用度数 = 2 的 gamLoess 时,train() 崩溃
- javascript - 将数组输入发送到后端时,Dropzone 插入与相同数量的文件相同数量的值