我需要获取类似内容的名称:
<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
...我的名字= [];怎么了?。感谢。
答案 0 :(得分: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']