正则表达式如何捕获无限组?

时间:2014-12-30 01:50:42

标签: python regex

我需要匹配以下内容:

text[ - (option1 option2 .. optionN)]
  • 文字可能有也可能没有空格
  • - 是字面值,只有在有任何选项
  • 时才会显示
  • 可以拥有无​​限的选项

示例:

rabbit
rabbit white
rabbit - onlyGif
rabbie - onlyGif recent

目前,我得到了以下内容:

^([\w ]+)(?:$|\s-\s(\w+)(?:\s(\w+))?(?:\s(\w+))?)

但是,捕获至少3个选项,我需要捕获N个选项。怎么做?

我正在使用Python。

1 个答案:

答案 0 :(得分:2)

在Python正则表达式中无法拥有无限数量的捕获组。但是,您可以使用一个正则表达式匹配整个表达式,然后使用第二个正则表达式来解析选项。例如:

match = re.match(r'^([\w ]+)(?:\s-((?:\s\w+)+))?$', input)
if match:
    text = match.group(1)
    if match.group(2):
        options = [m.group(0) for m in re.finditer(r'\w+', match.group(2))]
    else:
        options = []