2010-12-14 1634 views

回答

172

在大多数情况下,你不应该使用正则表达式。

os.path.splitext(filename)[0] 

这也将正确处理像.bashrc这样的文件名保持全名。

+0

@nate C:我修改了我的答案,而你正在写您的评论。 – 2010-12-14 22:34:36

+2

使用“git-1.7.8.tar.gz”无法正常工作,只能删除“.gz”。我使用'basename [: - len(“。tar.gz”)]'这个。 – blueyed 2011-12-09 14:10:24

+25

@blueyed:“不正常工作”是一个视角问题。该文件*是一个gzip文件,其基本名称是'git-1.7.8.tar'。没有办法正确地猜出调用者想要去掉多少个点,所以'splitext()'只能去掉最后一个点。如果你想处理像'.tar.gz'这样的边缘情况,你必须亲自去做。显然,你不能去掉所有的点,因为你最终会得到'git-1'。 – 2011-12-09 22:29:52

21
>>> import os 
>>> os.path.splitext("1.1.1.1.1.jpg") 
('1.1.1.1.1', '.jpg') 
5

不需要正则表达式。 os.path.splitext是你的朋友:

os.path.splitext('1.1.1.jpg') 
>>> ('1.1.1', '.jpg') 
8

如果我有一个正则表达式来做到这一点,我会做这样的:

s = re.sub(r'\.jpg$', '', s)