1

このXMLからエラーコードを取得するために正規表現を実行しようとしています。

>>> re_code = re.compile(r'<errorcode>([0-9]+)</errorcode>', re.MULTILINE)
>>> re_code.match('''<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
... <methoderesponse>
...     <status>
...         <message/>
...         <errorcode>515</errorcode>
...         <value>ERROR</value>
...     </status>
... </methoderesponse>
... ''')

とても簡単なはずです。しかし、なぜそれが一致しないのかわかりません。

4

2 に答える 2

8

.match()開始時に一致しようとします。あなたが望む.search()、またはより可能性が高い.findall()

ただし、XMLパーサーを見てください-データを取得するためにXPathまたは同等のものを使用する方がはるかに優れています(さらに、正規表現では処理されないニュアンスを処理します)

サンプルXMLで機能する例:

import xml.etree.ElementTree as ET
tree = ET.fromstring(text)

>>> tree.findall('.//errorcode')[0].text
'515'

ElementTreeの詳細については、こちらをご覧ください。個人的にlxmlを確認します。

于 2012-11-19T09:46:54.233 に答える
1

@ Jon Clementsが言っ.match()たように、式が文字列の先頭から実行されることになっている場合にのみ機能し、.search()文字列で最初の出現を.findall()検索し、すべての出現を検索します。

ただし、それにもかかわらず、正規表現を少し読みやすいバージョンに変更する必要があります。

regex = re.compile(r'<errorcode>(\d+)</errorcode>')

あなたはre.MULTILINE議論を必要としない、それはこの問題に関係しない。

于 2012-11-19T10:00:24.503 に答える