2010-12-14 1637 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)