0

以下に示すように、変数に格納されたアイテムのリストがあります。

listitems = ['<a href=\"\/other\/end\/f1\/738638\/adams\">Adams<\/a>\n', '<a href=\"\/other\/end\/f1\/23138\/donovan-smith\">Donovan Smith<\/a>\n']

私は人の名前を見つけようとしています。私の例では、名前は「Adams」と「Donovan Smith」ですが、パターンに特殊文字を受け入れるのに助けが必要です。通常はバックスラッシュを使用しますが、複数のバックスラッシュを挿入せずに一度に複数の特殊文字を受け入れる方法

また、Web リンクの一意の番号と名前をワイルドカード (無視) したいと考えています。たとえば23138、「donovan-smith」

私の現在のパターンは次のようになります。

pattern1 = re.compile('<a href=\"\/other\/end\/f1\/23138\/donovan-smith\">(.*?)<\/a>\n')

どんな助けでも大歓迎です。

4

1 に答える 1

2

あなたがやっていることはhtmlを解析しているなら、なぜ試してみませBeautifulSoupmechanizelxml.html

例えば、

import lxml.html

listitems = ['<a href=\"\/other\/end\/f1\/738638\/adams\">Adams<\/a>\n', '<a href=\"\/other\/end\/f1\/23138\/donovan-smith\">Donovan Smith<\/a>\n']

string = ' '.join(listitems)

page = lxml.html.fromstring(string)

a_tags = page.cssselect('a')

names = []
for tag in a_tags:
  names.append(tag.text_content().strip())

print names
['Adams', 'Donovan Smith']

あなたが望むものをあなたに与えるでしょう。さらに、xpath、css などに基づいて、選択したタグを微調整できます。

しかし、本当に自分で正規表現を書きたい場合は、もっと単純なものから始めてみませんか?

PATTERN = re.compile(r'<a.*?">(.*?)<\\/a>')

そう:

import re

listitems = ['<a href=\"\/other\/end\/f1\/738638\/adams\">Adams<\/a>\n', '<a href=\"\/other\/end\/f1\/23138\/donovan-smith\">Donovan Smith<\/a>\n']

PATTERN = re.compile(r'<a.*?">(.*?)<\\/a>')

names = []
for item in listitems:
  n = re.search(PATTERN, item).group(1)
  names.append(n)

print names
['Adams', 'Donovan Smith']
于 2013-08-01T00:29:11.957 に答える