在python中RE匹配失败,与regex101上的结果混淆

son*_*edu 1 python regex

http://regex101.com/r/oU6eI5/1,测试这里缝有效,但是当我放入Python时,匹配整个str.

str = galley/files/tew/tewt/tweqt/
re.sub('^.+/+([^/]+/$)', "\1", str) 
Run Code Online (Sandbox Code Playgroud)

我想得到"tweqt /"

Jer*_*rry 5

您需要在替换中使用原始字符串:

str = galley/files/tew/tewt/tweqt/
re.sub('^.+/+([^/]+/$)', r"\1", str)
#                        ^
Run Code Online (Sandbox Code Playgroud)

否则,您将获得转义字符\1.例如在我的控制台上,它有点笑脸.

如果你以某种方式不想生成你的字符串,你将不得不逃避反斜杠:

re.sub('^.+/+([^/]+/$)', "\\1", str)
Run Code Online (Sandbox Code Playgroud)

另外值得注意的是,生成正则表达式字符串并使用一致的引号是一个很好的做法,所以我建议您使用:

re.sub(r'^.+/+([^/]+/$)', r'\1', str)
Run Code Online (Sandbox Code Playgroud)

其他说明

匹配(使用re.search)而不是使用可能更简单re.sub:

re.search(r'[^/]+/$', str).group()
# => tweqt/
Run Code Online (Sandbox Code Playgroud)

并且您可能希望使用另一个变量名称,str因为这将覆盖现有函数str().