1

我需要获取类似内容的名称:

<p>
<a name="blu" title="blu"></a>orense
</p>
<p>
<a name="bla" title="bla"></a>toledo
</p>
<p>
<a name="blo" title="blo"></a>sevilla
</p>

但使用此代码:

names = []
matches = re.findall(r'''<a\stitle="(?P<title>[^">]+)"\sname="(?P<name>[^">]+)"></a>''',content, re.VERBOSE)
for (title, name) in matches:
    if title == name:
        names.append(title)
return names

...我得到名字=[]; 怎么了?。谢谢。

4

1 回答 1

4

嗯,很明显,在您的示例文本中,name出现在之前title,而在您的正则表达式中,title预计在之前name。这正是您应该使用 HTML 解析器的原因(或其中之一)。以 BeautifulSoup为例。

如果您坚持使用正则表达式,只需翻转参数(并确保您永远不会以不同的顺序获得这些属性,并且永远不会获得任何其他属性):

names = []
matches = re.findall(r'''<a\sname="(?P<name>[^">]+)"\stitle="(?P<title>[^">]+)"></a>''',content, re.VERBOSE)
for (name, title) in matches:
    if title == name:
        names.append(title)

结果:

>>> names
['blu', 'bla', 'blo']
于 2012-05-09T07:54:48.783 回答