Python正则表达式匹配多个单词anywh

2024-05-21 12:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用python的正则表达式来匹配一个字符串和几个单词。 例如,字符串是“这些是桔子、苹果和梨子,但不是苹果或……”我要查找的单词列表是“and”、“or”和“not”。不管是命令还是位置。

我试过r'AND | OR | NOT 但没用。

也试过r'.*?\bAND\b.*?\bOR\b.*?\bNOT\b.*?$ 还是没用。。。

不擅长正则表达式。。 还有暗示? 谢谢!


Tags: orand字符串命令苹果列表bandnot
2条回答

你有一些问题。

首先,匹配是区分大小写的,除非使用IGNORECASE/I标志忽略大小写。所以,'AND''and'不匹配。

另外,除非使用VERBOSE/X标志,否则这些空格是模式的一部分。所以,你要检查的是'AND ',而不是'AND'。如果你想要的话,你可能需要两边都有空格,而不仅仅是那些边(否则,'band leader'会匹配…),实际上,你可能需要\b,而不是空格(否则以'And another thing'开头的句子不会匹配)。

最后,如果你认为你需要.*在你的模式之前和之后以及$^在它周围,你很有可能想要使用searchfindall,或者finditer,而不是match

所以:

>>> s = "These are oranges and apples and pears, but not pinapples or .."
>>> r = re.compile(r'\bAND\b | \bOR\b | \bNOT\b', flags=re.I | re.X)
>>> r.findall(s)
['and', 'and', 'not', 'or']

Regular expression visualization

Debuggex Demo

试试这个:

>>> re.findall(r"\band\b|\bor\b|\bnot\b", "These are oranges and apples and pears, but not pinapples or ..")
['and', 'and', 'not', 'or']

a | b表示匹配a或b

\b表示单词边界

re.findall(pattern,string)返回字符串中pattern的所有实例的数组

相关问题 更多 >