2016-04-30 36 views
2

我需要在中間數字的任意一邊去掉一系列文件名中的所有內容(即替換爲空白)。我可以分兩步做,但我希望在一個步驟中完成。Python正則表達式 - 剝離開始和結束並保持中間不變

兩個步驟:

filename = "NRC_401653_XL3213456321_NRCE_KR.pdf" 

front_gone = re.sub(r'(\w{3})_(\d{6})_', '', filename) 

both_gone = re.sub(r'_NRCE_KR.pdf', '', front_gone) 

這將導致在短短XL3213456321剩下的,這正是我所需要的。我想一步到位。

+1

''NRC_401653_XL3213456321_NRCE_KR.pdf「.split('_')[2]'? – IanAuld

+0

分割有什麼問題? –

+0

或're.sub(r'^ \ w {3} _ \ d {6} _(\ w +)_ NRCE_KR.pdf',r'\ 1',filename)' –

回答

1

嘗試:

import re 
filename = "NRC_401653_XL3213456321_NRCE_KR.pdf" 
print re.sub(r"\w{3}_\d+_(\w+)_NRCE_KR\.pdf", r"\1", filename) 

輸出:

XL3213456321 

(\w+)將提取的匹配組(號碼1)。然後,您想要將整個字符串替換爲中間代碼,這就是爲什麼您只需要通過\ 1作爲替換。

+0

它是否知道它是所指的組由\ 1,因爲它在括號內? –

+0

確切的說,因爲它是一個捕獲組。 –

+0

我明白了。所以如果有多個括號內的小組,他們是\ 2,\ 3等等? –

相關問題