【问题标题】:Multiple results from one subgroup来自一个子组的多个结果
【发布时间】:2010-06-19 12:45:31
【问题描述】:

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

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

您将如何更改它以返回不同组中的所有属性? 我实际上有更多的正则表达式,所以使用诸如 python 的 findall 和等效函数之类的函数是行不通的。

【问题讨论】:

  • 正则表达式的所有方言都不支持重复子表达式。你用的是哪一个?
  • @Stephen 这是使用 PHP 5.3.2 和 Python 2.6.1 测试的
  • 我不知道 php,但我不确定这在 python 中是否可行。尝试使用findallfinditer

标签: regex


【解决方案1】:

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

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

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

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

也可以看看Capturing a repeated group

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 2019-04-20
    • 2022-07-27
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多