Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正则表达式:多次匹配组_Python_Regex_Quantifiers_Regex Group - Fatal编程技术网

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