返回Python中捕获组的所有匹配项

时间:2019-08-23 02:04:51

标签: python regex regex-group

我正在实现一个采用正则表达式模式(如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+/)+的所有三个匹配项。

2 个答案:

答案 0 :(得分:0)

如果您只想捕获所有路径名,然后使用分隔符,则将模式\w+/re.findall一起使用:

inp = "ab/cd/ef/end"
matches = re.findall(r'\w+/', inp)
print(matches)

['ab/', 'cd/', 'ef/']

如果您想要所有路径组件,无论它们前面是否都带有路径分隔符,那么我们可以尝试:

inp = "ab/cd/ef/end"
matches = re.findall(r'[^/]+', inp)

答案 1 :(得分:0)

r = r"(\w+/)(?<!end)"
s = "ab/cd/ef/end"

m = re.finditer(r, s, re.MULTILINE)

for g in m:
    print(g.group())

示例

https://regex101.com/r/VJ6knI/1