首页 > 解决方案 > 查找所有*不*匹配正则表达式的单词/子字符串?

问题描述

所以我想找到所有不在正则表达式中的字符串部分。

假设我有一个正则表达式r'foo|bar'和字符串'Hello foo how are you bar',我怎样才能得到除正则表达式匹配之外的每个单词以便返回['Hello', 'how', 'are', 'you']

标签: pythonregex

解决方案


您可以使用列表理解并否定正则表达式匹配:

>>> st='Hello foo how are you bar'
>>> [w for w in st.split() if not re.search(r'foo|bar', w)]
['Hello', 'how', 'are', 'you']

您没有问,但您可能希望在您的正则表达式中使用锚点,以便如果您有foofoobarfoofooblulator在列表中,它会按预期处理。

如果你只是简单的单词查找,不需要正则表达式,同样的方法也有效:

>>> [w for w in st.split() if w not in {'foo', 'bar'}]
['Hello', 'how', 'are', 'you']

推荐阅读