Python正则表达式可以在任

Jud*_*ang 8 python regex

我正在尝试使用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)

正则表达式可视化

Debuggex演示


Ved*_*kib 6

尝试这个:

>>> 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 中所有模式实例的数组