我试图使用python的正则表达式来匹配一个包含多个单词的字符串。 例如,字符串是"这些是橙子,苹果和梨,但不是pinapples或.."我要查找的字词列表是'和','或'并且'不是'。无论顺序还是位置。
我试过r'AND | OR | NOT
但是没有工作。
还尝试了r'.*?\bAND\b.*?\bOR\b.*?\bNOT\b.*?$
仍然没有工作......
不善于正则表达.. 还有提示? 谢谢!
答案 0 :(得分:15)
你遇到了一些问题。
首先,匹配区分大小写,除非您使用IGNORECASE
/ I
标志来忽略大小写。因此,'AND'
与'and'
不匹配。
此外,除非您使用VERBOSE
/ X
标志,否则这些空格是模式的一部分。因此,您需要检查'AND '
,而不是'AND'
。如果你想要那样,你可能希望每一边都有空格,而不仅仅是那些边(否则,'band leader'
将匹配......),实际上,你可能想要\b
,而不是空格(否则是以'And another thing'
开头的句子不匹配。
最后,如果您认为在模式之前和之后需要.*
并且围绕它$
和^
,那么您很有可能想要使用search
,{ {1}}或findall
,而不是finditer
。
所以:
match
答案 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模式的数组