Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式匹配任意位置的多个单词_Python_Regex - Fatal编程技术网

Python正则表达式匹配任意位置的多个单词

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

我试图使用python的正则表达式来匹配一个字符串和几个单词。 例如,字符串是“这些是桔子、苹果和梨,但不是苹果或..”,我要查找的单词列表是“and”、“or”和“not”。无论是顺序还是位置

我尝试了
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']