0

我在 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>

任何想法为什么它只匹配第一个?

4

1 回答 1

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>
于 2013-07-06T01:16:41.220 回答