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

...私はnames=[];を取得します なにが問題ですか?。ありがとう。

4

1 に答える 1

4

ええと、明らかに、サンプル テキストでは のnametitleに来て、正規表現でtitleは の前に期待されますname。これがまさに、代わりに HTML パーサーを使用すべき理由 (またはその 1 つ) です。たとえば、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 に答える