我有一个XML代码段:
<CharacterBlock MinVal="-10.000000" MaxVal="15.000000" Active="1">
我需要解析最小和最大浮点值。我不能使用像ElementTree这样的XML解析器,所以我不得不使用正则表达式。
我编写了以下Python正则表达式:
re.compile('<CharacterBlock MinVal="(?P<MinVal>-?[0-9]*\.?[0-9]*)" MaxVal="(?P<MaxVal>-?[0-9]*\.?[0-9]*)" .*?>', re.DOTALL)
适用于上述代码段。但由于XML属性就像字典,因此无法保证其顺序,有时我会收到一个代码片段:
<CharacterBlock Active="0" MaxVal="-15.000000" MinVal="-100.000000">
如何处理我想要匹配的组的顺序不固定的情况?
答案 0 :(得分:1)
你能分别得到这两个值吗?像:
In [2]: s='<CharacterBlock Active="0" MaxVal="-15.000000" MinVal="-100.000000">'
In [3]: import re
In [4]: manReg='(?<=MaxVal=")[^"]*'
In [5]: minReg='(?<=MinVal=")[^"]*'
In [6]: re.findall(minReg, s)
Out[7]: ['-100.000000']
In [8]: re.findall(maxReg, s)
Out[9]: ['-15.000000']
答案 1 :(得分:1)
由于订单不固定且还有其他字段,最好的选择是使用两个正则表达式,一个用于MaxVal,另一个用于MinVal。
答案 2 :(得分:0)
类似的东西:
for xmltag in re.finditer(r'<CharacterBlock.*?>', s):
ismin = re.search(r'\bMinVal=["\'](.*?)[\'"]', xmltag.group(0))
if ismin:
min=ismin.group(1)
ismax= re.search(r'\bMaxVal=["\'](.*?)[\'"]', xmltag.group(0))
if ismax:
max=ismax.group(1)
if ismin and ismax:
print "Min: %s, Max %s" % (min, max)