0

可能重复:
Python 正则表达式 - 如何从通配符表达式中捕获多个组?
组匹配的python正则表达式

我知道有更好或更简单的方法可以做到这一点,但是当我自己尝试过但没有奏效时,我很感兴趣为什么,所以这里有问题:

假设我想使用正则表达式获取 Xml 属性。让我们看看下面的 XML-Node:

<?xml version="1.0" encoding="UTF-8"?> 
<Node key1="val1" key2="val2">
    <OtherNode>
        <!-- something -->
    </OtherNode>
</Node>

解析Node以及OtherNode我有以下正则表达式:

import re
pattern=re.compile
('\s*?<(?P<key>[\w\d]+?)
  \s*?(?P<meta>(?P<metakey>[\w:]+?)="(?P<metavar>.+?)"\s*)*>')

的输出pattern.findall(xml)是:

('Node', 'key2="val2"', 'key2', 'val2') ('OtherNode', '', '', '')

和输出[m.groupdict() for m in pattern.finditer(xml)]

{'metakey': 'key2', 'meta': 'key2="val2"', 'metavar': 'val2', 'key': 'Node'}
{'metakey': None, 'meta': None, 'metavar': None, 'key': 'OtherNode'}

似乎只有最后一个元变量可以作为组访问。

如何搭配key1以及key2?是否可以将多个组与(...)*构造匹配?换句话说:meta如果存在,我希望正则表达式多次匹配命名组。

4

0 回答 0