我需要匹配以下内容:
text[ - (option1 option2 .. optionN)]
示例:
rabbit
rabbit white
rabbit - onlyGif
rabbie - onlyGif recent
目前,我得到了以下内容:
^([\w ]+)(?:$|\s-\s(\w+)(?:\s(\w+))?(?:\s(\w+))?)
但是,捕获至少3个选项,我需要捕获N个选项。怎么做?
我正在使用Python。
答案 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 = []