Python正则表达式可以在任

时间:2014-11-18 01:47:14

标签: python regex

我试图使用python的正则表达式来匹配一个包含多个单词的字符串。 例如,字符串是"这些是橙子,苹果和梨,但不是pinapples或.."我要查找的字词列表是'和','或'并且'不是'。无论顺序还是位置。

我试过r'AND | OR | NOT 但是没有工作。

还尝试了r'.*?\bAND\b.*?\bOR\b.*?\bNOT\b.*?$ 仍然没有工作......

不善于正则表达.. 还有提示? 谢谢!

2 个答案:

答案 0 :(得分:15)

你遇到了一些问题。

首先,匹配区分大小写,除非您使用IGNORECASE / I标志来忽略大小写。因此,'AND''and'不匹配。

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

最后,如果您认为在模式之前和之后需要.*并且围绕它$^,那么您很有可能想要使用search,{ {1}}或findall,而不是finditer

所以:

match

Regular expression visualization

Debuggex Demo

答案 1 :(得分:2)

试试这个:

>>> 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模式的数组