python regex:不止一次匹配一个组

时间:2012-09-02 13:45:24

标签: python regex quantifiers regex-group

  

可能重复:
  Python regular expressions - how to capture multiple groups from a wildcard expression?
  python regex of group match

我知道有更好或更简单的方法来做到这一点,但是当我自己尝试它并且它不起作用时我感兴趣为什么,所以这就是问题所在:

假设我想用正则表达式获取Xml属性。让我们看看以下XML节点:

<?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'}

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

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

0 个答案:

没有答案