我正在尝试使用python的正则表达式来匹配带有多个单词的字符串.例如,字符串是"这些是橘子,苹果和梨,但不是pinapples或.."我想要找到的单词列表是'和','或'和'不'.无论顺序还是位置.
我尝试r'AND | OR | NOT
但没有奏效.
还试过r'.*?\bAND\b.*?\bOR\b.*?\bNOT\b.*?$
还是没工作......
不擅长正则表达..并暗示?谢谢!
aba*_*ert 19
你有一些问题.
首先,匹配区分大小写,除非您使用IGNORECASE/ Iflag忽略大小写.所以,'AND'不匹配'and'.
此外,除非使用VERBOSE/ Xflag ,否则这些空格是模式的一部分.所以,你要检查'AND ',而不是'AND'.如果你想要那个,你可能想要每一边都有空格,而不仅仅是那些边(否则,'band leader'它会匹配...),真的,你可能想要的\b,而不是空格(否则一个句子开头'And another thing'不会匹配) .
最后,如果你认为你需要.*你的模式之前和之后,并$和^它周围,有你想使用一个很好的机会search,findall或者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']
Run Code Online (Sandbox Code Playgroud)

尝试这个:
>>> re.findall(r"\band\b|\bor\b|\bnot\b", "These are oranges and apples and pears, but not pinapples or ..")
['and', 'and', 'not', 'or']
Run Code Online (Sandbox Code Playgroud)
a|b 表示匹配 a 或 b
\b 代表单词边界
re.findall(pattern, string) 返回 string 中所有模式实例的数组