字典属性的正则表达式

时间:2012-10-15 15:19:12

标签: python regex

我有一个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">

如何处理我想要匹配的组的顺序不固定的情况?

3 个答案:

答案 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)