python正则表达式仅匹配特定单词,不匹配子集

python正则表达式仅匹配特定单词,不匹配子集,python,regex,Python,Regex,我试图在python中使用正则表达式搜索特定的单词 lst2 = ['Azmat', 'AZ', 'azim', 'Zard', 'Zardari'] pattern = re.compile(r"\bAZ|Zard\b", re.I) for item in lst2: if re.search(pattern, item): print item 此代码生成: Azmat AZ azim Zard 为什么它不能只匹配“AZ”和“Zard”?您当前的代码正在寻找

我试图在python中使用正则表达式搜索特定的单词

lst2 = ['Azmat', 'AZ', 'azim', 'Zard', 'Zardari']

pattern = re.compile(r"\bAZ|Zard\b", re.I)

for item in lst2:
    if re.search(pattern, item):
        print item
此代码生成:

Azmat
AZ
azim
Zard

为什么它不能只匹配“AZ”和“Zard”?

您当前的代码正在寻找一个以
AZ
开头或以
Zard
结尾的单词。像这样修复它:

pattern = re.compile(r"\b(AZ|Zard)\b", re.I)

您当前的代码正在查找以
az
开头或以
zard
结尾的单词。像这样修复它:

pattern = re.compile(r"\b(AZ|Zard)\b", re.I)
那么:

pattern = re.compile(r"^(AZ|Zard)$", re.I)
最好用
^
$

显示字符串的开头和结尾,那么:

pattern = re.compile(r"^(AZ|Zard)$", re.I)

最好使用
^
$

显示字符串的开头和结尾,这是因为您的正则表达式匹配:

\bAZ

使用非捕获组限制
|
运算符的“影响”:

\b(?:AZ|Zard)\b

这样,它的内容是:
\b
然后是
AZ
Zard
和最后一个
\b
这是因为您的正则表达式匹配:

\bAZ

使用非捕获组限制
|
运算符的“影响”:

\b(?:AZ|Zard)\b

这样,它就会读到:
\b
然后是
AZ
Zard
和最后一个
\b
r“\b(AZ | Zard)\b”
r^(AZ | Zard)$”
?对于你的例子来说,没有,但是
^
表示“字符串的开始”和
$/code>“字符串的结束”。如果字符串中有多个单词,则无法使用。首先可以在字符串
qwe-AZ-wdwq-Zard-dawg-aw
中查找匹配项
AZ
Zard
。第二种模式只有在字符串正好是
AZ
Zard
时才匹配,但是
^
表示“字符串的开始”和
$
“字符串的结束”。如果字符串中有多个单词,则无法使用。首先可以在字符串
qwe-AZ-wdwq-Zard-dawg-aw
中查找匹配项
AZ
Zard
。第二种模式仅当字符串正好是
AZ
Zard