Python正则表达式匹配任意位置的多个单词
我试图使用python的正则表达式来匹配一个字符串和几个单词。 例如,字符串是“这些是桔子、苹果和梨,但不是苹果或..”,我要查找的单词列表是“and”、“or”和“not”。无论是顺序还是位置 我尝试了Python正则表达式匹配任意位置的多个单词,python,regex,Python,Regex,我试图使用python的正则表达式来匹配一个字符串和几个单词。 例如,字符串是“这些是桔子、苹果和梨,但不是苹果或..”,我要查找的单词列表是“and”、“or”和“not”。无论是顺序还是位置 我尝试了r'和|或|不 但是没有起作用 还尝试了r.*?\bAND\b.*?\bOR\b.*?\bNOT\b.*?$ 还是不起作用 不擅长正则表达式。。 还有提示? 谢谢 试试这个: >>> re.findall(r"\band\b|\bor\b|\bnot\b", "These ar
r'和|或|不
但是没有起作用
还尝试了r.*?\bAND\b.*?\bOR\b.*?\bNOT\b.*?$
还是不起作用
不擅长正则表达式。。
还有提示?
谢谢 试试这个:
>>> 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的所有实例的数组这里有一些问题 首先,匹配区分大小写,除非使用
IGNORECASE
/I
标志忽略大小写。所以,”和“
不匹配”和“
”
此外,除非使用VERBOSE
/X
标志,否则这些空格是模式的一部分。所以,您要检查的是和'
,而不是和'
。如果你想这样做,你可能希望两边都有空格,而不仅仅是那些边(否则,'band leader'
会匹配…),而且实际上,你可能想要的是\b
,而不是空格(否则以开头的句子和另一个东西“
不会匹配)
最后,如果您认为您需要在模式前后使用*
以及模式周围的$
和^
,那么您很可能希望使用搜索
、findall
或finditer
,而不是匹配
因此:
您想捕获它们还是仅仅检测它们是否存在?如果您只需要检查它们是否存在,请使用中的
。例如,[word in'这些是桔子、苹果和梨,但不是pinapples或.”For word in['or','and','not']][True,True,True]
@Cfreak捕获它们。{1}
在这里添加了什么?除非您另行指定,否则模式始终匹配其自身的一个副本。而且,{n}
比|
绑定得非常紧密,因此即使它有用,也只会影响t
,而不会影响整个交替。另外,我很确定他不想匹配橙子
中的或
,因此所有空格和\b
之类的东西。
>>> 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']