来自一个子组的多个结果

时间:2010-06-19 12:45:32

标签: regex

我有这个字符串: <own:egna attribute1="1" attribute2="2">test</own:egna>
我想用正则表达式捕获所有属性。

此正则表达式匹配一个属性:(\s+attribute\d=['"][^'"]+['"])
但是为什么附加一个+就像``(\ s + attribute \ d = ['“] [^'”] + ['“])+`实际上只返回最后一个匹配的属性而不是全部? / p>

您如何更改此选项以返回单独组中的所有属性? 我实际上有更多的regexp,所以使用python的findall和等价物等功能是不行的。

1 个答案:

答案 0 :(得分:0)

简短的回答是你不能 - 只有最后一组可以访问。 Python文档明确说明了这一点:

  

如果一个组多次匹配,则只能访问最后一个匹配[...]

您必须使用某些语言功能:

  1. 在PHP中,preg_match_all返回所有匹配项。
  2. 在其他语言中,您必须手动执行此操作:将g修饰符添加到正则表达式并循环遍历它。例如,Perl将管理字符串位置,并在每次匹配/([...])/g模式时返回$ 1的下一个匹配。
  3. 另请查看Capturing a repeated group