-3

いくつかのxmlを解析するスクリプトがあります。XMLに含まれるもの:

<SD TITLE="A" FLAGS="" HOST="9511.com">
<TITLE TEXT="9511 domain"/>
<ADDR STREET="Pmb#400, San Pablo Ave" CITY="Berkeley" STATE="CA" COUNTRY="US"/>
<CREATED DATE="13-Oct-1990" DAY="13" MONTH="10" YEAR="1990"/>
<OWNER NAME="9511.Org Domain Name Proxy Agents"/>
<EMAIL ADDR="proxy@9511.org"/><LANG LEX="en" CODE="us-ascii"/>
<LINKSIN NUM="75"/><SPEED TEXT="3158" PCT="17"/>
<CHILD SRATING="0"/>
</SD>
<SD>
<POPULARITY URL="9511.com/" TEXT="1417678" SOURCE="panel"/>
</SD>

タグの「TEXT」属性値(私の場合は1417678)を取得するにはどうすればよいですか?正規表現+Pythonを使用しています。正規表現文字列:

my_value = re.findall("POPULARITY[^\d]*(\d+)", xml)

「9511」になりますが、「1417678」が必要です。

4

2 に答える 2

1

要素の名前の後に出現する 10 進数の最初のシーケンスと一致しているだけです。'(\d+)'任意の数の非数字の後の最初の数字のシーケンス'[^\d]*'は です9511

属性findallの値を取得するには、次のようにします。@TEXT

my_values = re.findall("<POPULARITY(?:\D+=\"\S*\")*\s+TEXT=\"(\d*)\"", xml) # returning a list btw

または、 を除いて他の属性に数字のみの値がない場合@TEXT:

 re.findall("<POPULARITY\s+(?:\S+\s+)*\w+=\"(\d+)\"", xml)

where(?:...)は採用された表現に一致しますが、 のようにアドレス指定可能なグループとしては機能しません(...)。特殊なシーケンス\S\Dは、対応する小文字の反転であり、それぞれ (以外の) 空白と数字に展開されます。

ただし、既に述べたように、XML は通常の言語ではないため、正規表現は XML で使用するためのものではありません。

于 2013-02-28T08:26:38.617 に答える