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

时间:2014-09-02 09:35:04

标签: python regex

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

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

我想得到" tweqt /"

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

如果将模式或正则表达式定义为原始字符串会更好。

>>> import re
>>> s = "galley/files/tew/tewt/tweqt/"
>>> m = re.sub(r'^.+/+([^/]+/$)', r'\1', s)
               ^                  ^
>>> m
'tweqt/'