python:re模块的function sub

时间:2015-06-03 11:03:00

标签: python regex string

这应该是一个不同的基本要做的事情,但我无法让它工作,尽管从网络上了解了很多例子。 我正在尝试的是使用子函数从完整路径获取文件的名称。

所以,如果

output="/home/alvarofeal/Desktop/prueba_sub.avi"
re.sub(r'(.*\/)*', "", output)
print output

output: /home/alvarofeal/Desktop/prueba_sub.avi

输出不应该是:

prueba_sub.avi

3 个答案:

答案 0 :(得分:2)

re.sub()会返回新字符串。字符串是不可变的,不能就地更改。

你忽略了返回值;如果要替换旧值,请将其存储在output中:

output = "/home/alvarofeal/Desktop/prueba_sub.avi"
output = re.sub(r'(.*\/)*', "", output)
print output

如果你所做的只是拆分文件路径的基本名称,你可能想要使用os.path.basename() function代替。

答案 1 :(得分:1)

你必须这样做,

output = re.sub(r'(.*\/)*', "", output)

因为re.sub()返回新字符串

使用ntpath

>>>import ntpath
>>>ntpath.basename(output)
'prueba_sub.avi'

答案 2 :(得分:1)

您不需要正则表达式执行此任务。作为一种更加pythonic的方式,您可以os.path.basename使用str.split

>>> os.path.basename('/home/alvarofeal/Desktop/prueba_sub.avi').split('.')[0]
'prueba_sub'

或只使用basename获取格式名称:

>>> os.path.basename('/home/alvarofeal/Desktop/prueba_sub.avi')
'prueba_sub.avi'