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 回答