0

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

如果我想匹配的组的顺序不固定,我该如何处理?

4

3 回答 3

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']
于 2012-10-15T15:24:37.237 回答
1

由于顺序不固定并且还有其他字段,因此您最好的选择是使用两个正则表达式,一个用于 MaxVal,另一个用于 MinVal。

于 2012-10-15T15:25:43.083 回答
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)
于 2012-10-15T19:31:53.690 回答