python正则表达式:多次匹配组
可能重复:python正则表达式:多次匹配组,python,regex,quantifiers,regex-group,Python,Regex,Quantifiers,Regex Group,可能重复: 我知道有更好或更简单的方法可以做到这一点,但我自己也尝试过,但没有成功,我对原因很感兴趣,所以问题是: 假设我想用正则表达式获取Xml属性。让我们看看以下XML节点: <?xml version="1.0" encoding="UTF-8"?> <Node key1="val1" key2="val2"> <OtherNode> <!-- something --> </OtherNode&g
我知道有更好或更简单的方法可以做到这一点,但我自己也尝试过,但没有成功,我对原因很感兴趣,所以问题是: 假设我想用正则表达式获取Xml属性。让我们看看以下XML节点:
<?xml version="1.0" encoding="UTF-8"?>
<Node key1="val1" key2="val2">
<OtherNode>
<!-- something -->
</OtherNode>
</Node>
pattern.findall(xml)
的输出是:
('Node','key2=“val2','key2','val2')
('OtherNode','','')
以及模式中m的[m.groupdict()的输出.finditer(xml)]
:
似乎只有最后一个metavar可以作为组访问
如何匹配
key1
以及key2
?难道不能用(…)*
构造匹配多个组吗?换句话说:如果存在,我希望正则表达式多次匹配命名组meta
。如果你想解析xml,考虑使用xml解析器,就像我首先提到的那样:我知道有xml解析器,只是想知道为什么我不能匹配一个组超过一次检查这个答案:@hayden你听说过懒散量词吗*
是一个贪婪的
量词,其中*?
和+?
由后面的?
表示。阅读文档:谢谢你的解释,我的错误!
import re
pattern=re.compile
('\s*?<(?P<key>[\w\d]+?)
\s*?(?P<meta>(?P<metakey>[\w:]+?)="(?P<metavar>.+?)"\s*)*>')
{'metakey': 'key2', 'meta': 'key2="val2"', 'metavar': 'val2', 'key': 'Node'}
{'metakey': None, 'meta': None, 'metavar': None, 'key': 'OtherNode'}