我有以下数据:
/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA.torrent/Big.Buck.Bunny.720p.Bluray.x264-BLA
但是,我不想在其中使用“Big.Buck.Bunny.720p。Bluray.x264-BLA.torrent /”,我希望路径如下:
/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA
使用正则表达式我基本上想要数学中包含* .torrent。/,我怎样才能在regexp中实现这一点?
谢谢!
答案 0 :(得分:12)
您甚至不需要正则表达式。您可以使用os.path.dirname
和os.path.basename
:
os.path.join(os.path.dirname(os.path.dirname(path)),
os.path.basename(path))
其中path
是文件的原始路径。
或者,您也可以使用os.path.split
,如下所示:
dirname, filename = os.path.split(path)
os.path.join(os.path.dirname(dirname), filename)
注意这将假设您要删除的内容是包含路径中文件的目录名称,如问题示例中所示。
答案 1 :(得分:4)
您可以在不使用正则表达式的情况下执行此操作:
>>> x = unicode('/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA.torrent/Big.Buck.Bunny.720p.Bluray.x264-BLA')
>>> x.rfind('.torrent')
66
>>> x[:x.rfind('.torrent')]
u'/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA'
答案 2 :(得分:1)
我基本上想要数学中包含* .torrent。/,我怎样才能在regexp中完成这个?
您可以使用:
[^/]*\.torrent/
假设最后.
是一个错字。
答案 3 :(得分:1)
给定path='/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA.torrent/Big.Buck.Bunny.720p.Bluray.x264-BLA'
您可以使用正则表达式
来执行此操作re.sub("/[^/]*\.torrent/","",path)
您也可以在没有正则表达式的情况下执行此操作
'/'.join(x for x in path.split("/") if x.find("torrent") == -1)
答案 4 :(得分:0)
你的问题有点含糊不清,但这是剥离你想要的一种方法:
import re
s = "/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA.torrent/Big.Buck.Bunny.720p.Bluray.x264-BLA"
c = re.compile("(/.*/).*?torrent/(.*)")
m = re.match(c, s)
path = m.group(1)
file = m.group(2)
print path + file
>>> ## working on region in file /usr/tmp/python-215357Ay...
/share/Downloads/Videos/Movies/Big.Buck.Bunny.720p.Bluray.x264-BLA