正则表达式找不到两个匹配

时间:2013-07-06 00:50:35

标签: python regex

我在Python中有这个正则表达式:

p = re.compile("<" + tag + ">([aA-zZ0-9\-\s:]*)</" + tag + ">")

我似乎无法在此字符串中找到两个匹配项(标记为“唯一”)

<unique>UNIQUE Passive - Maim:</unique> Basic attacks deal 10 bonus magic damage to monsters on hit.<br><unique>UNIQUE Passive - Butcher:</unique> Damage dealt to monsters increased by 10%.<br><br><i>ique Passives with the same name don't stack.)</i>

为什么它只与第一个匹配?

1 个答案:

答案 0 :(得分:3)

如果您使用p.search,请使用findall或finditer而不是。

import re
tag = 'unique'
# p = re.compile("<" + tag + ">([aA-zZ0-9\-\s:]*)</" + tag + ">")
# aA-zZ means a, range A-z and Z. this includes some sign like '[', '^' ... .
# the last '-' in character group( inside [ and ] ) matches '-' self.
p = re.compile("<" + tag + ">([a-zA-Z0-9\s:-]*)</" + tag + ">")

ml = "<unique>UNIQUE Passive - Maim:</unique> Basic attacks deal 10 bonus magic damage to monsters on hit.<br><unique>UNIQUE Passive - Butcher:</unique> Damage dealt to monsters increased by 10%.<br><br><i>ique Passives with the same name don't stack.)</i>"
m = p.search(ml)
print m.group()
print

print p.findall(ml)
print

for m in p.finditer(ml):
    print m.group()

输出:

<unique>UNIQUE Passive - Maim:</unique>

['UNIQUE Passive - Maim:', 'UNIQUE Passive - Butcher:']

<unique>UNIQUE Passive - Maim:</unique>
<unique>UNIQUE Passive - Butcher:</unique>