【问题标题】:Python match only captures first groupPython match 仅捕获第一组
【发布时间】:2012-11-21 00:45:09
【问题描述】:

我正在尝试使用 python 哟匹配字符串。

>> self._regexs = re.compile("(?P<g0>.*AMD$)|(?P<g1>.*AMD$)|(?P<g2>.*AMD$)|(?P<g3>.*)", re.DEBUG)
>> m = self._regexs.match("AMD")
>> print m.groups()
('AMD', None, None, None)

我原以为 m.groups() 会显示:

>> print m.groups()
('AMD', 'AMD', 'AMD', None) 

但显然我做错了什么。我想知道为什么这个解决方案不起作用以及如何更改它,以便得到我正在寻找的结果。

【问题讨论】:

  • 你到底想做什么?对我来说似乎有点令人费解......
  • 我在 python 上使用 nltk (RegexpTagger)。但是一个词可以一个标签。我想改变它。
  • 可能值得更新您的问题 - 可能提到 ntlk 和您的“最终目标”,而不是现在的措辞方式......

标签: python regex match


【解决方案1】:

正则表达式的作用是greedy,因为它将接受第一个匹配项。在您的示例中,这是第一个捕获组,具有您的特定输入。替代表达式(由| 表示)将始终匹配示例字符串满足的第一个替代表达式。

看起来您正在尝试创建 switchcase 类型的正则表达式,这是无法完成的,因为它需要对 | 之间的每个不同的不同子正则表达式进行回溯。使用单个正则表达式无法实现您希望达到的结果。

另见:

【讨论】:

    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    相关资源
    最近更新 更多