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