Python中RE匹配失败,和regex101结果困惑
在这个链接 http://regex101.com/r/oU6eI5/1 上测试的时候,结果看起来没问题,但当我在Python中使用时,却匹配到了整个字符串。
str = galley/files/tew/tewt/tweqt/
re.sub('^.+/+([^/]+/$)', "\1", str)
我想要得到的是 "tweqt/"。
2 个回答
5
你需要在替换的时候使用原始字符串:
str = galley/files/tew/tewt/tweqt/
re.sub('^.+/+([^/]+/$)', r"\1", str)
# ^
否则,你会得到转义字符 \1
。比如在我的控制台上,它显示的是一个小笑脸。
如果你不想使用原始字符串,你就得把反斜杠转义:
re.sub('^.+/+([^/]+/$)', "\\1", str)
另外,值得注意的是,使用原始正则表达式字符串和一致的引号是个好习惯,所以我建议你使用:
re.sub(r'^.+/+([^/]+/$)', r'\1', str)
其他注意事项
使用 re.search
来匹配可能会更简单,而不是使用 re.sub
:
re.search(r'[^/]+/$', str).group()
# => tweqt/
另外,你可能想用其他变量名,而不是 str
,因为这样会覆盖掉已有的函数 str()
。
3
如果你把模式或者正则表达式定义为原始字符串,那会更好。
>>> import re
>>> s = "galley/files/tew/tewt/tweqt/"
>>> m = re.sub(r'^.+/+([^/]+/$)', r'\1', s)
^ ^
>>> m
'tweqt/'