0

我正在实现一种方法,该方法采用正则表达式模式,例如r'(\w+/)+end'和 string '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+/)+

4

2 回答 2

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)
于 2019-08-23T02:13:09.457 回答
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

于 2019-08-23T02:13:19.453 回答