【发布时间】:2019-08-23 02:04:51
【问题描述】:
我正在实现一个方法,它采用像r'(\w+/)+end' 这样的正则表达式模式和一个字符串'ab/cd/ef/end'。请注意,我不能请求方法的调用者更新他们的模式格式。在该方法中,我需要执行一个操作,该操作需要提取第一个捕获组的所有匹配项,即ab/、cd/ 和ef/。
如何在 Python 中实现这一点?类似下面的内容为每个捕获组返回一个最后匹配的元组。在这个例子中我们只有一个,所以它返回('ef/',)。
re.match(r'(\w+/)+end', 'ab/cd/ef/end').groups()
顺便说一句,在 C# 中,每个捕获组都可以匹配多个字符串,例如Regex.Match("ab/cd/ef/end", @"(\w+/)+end").Groups[1].Captures 将返回第一个捕获组 (\w+/)+ 的所有三个匹配项。
【问题讨论】:
-
无法接受答案。我已经提到不可能更改正则表达式。在捕获组括号中提取模式文本可能容易出错。我将继续使用正则表达式项目 (pypi.org/project/regex)。它很好地解决了我的问题:
regex.match(r'(\w+/)+end', 'ab/cd/ef/end').captures(1)返回['ab/', 'cd/', 'ef/']。
标签: python regex regex-group