2016-04-30 89 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等等? –

相关问题