[英]Python re.sub with regex
需要 re.sub 中的正则表达式帮助。 在这种情况下,我什么都不替换(“”)
我当前的代码:
file_list = ['F_5500_SF_PART7_[0-9][0-9][0-9][0-9]_all.zip',
'F_5500_SF_[0-9][0-9][0-9][0-9]_All.zip',
'F_5500_[0-9][0-9][0-9][0-9]_All.zip',
'F_SCH_A_PART1_[0-9][0-9][0-9][0-9]_All.zip']
foldernames = [re.sub('(\d{4})_All.zip', '', i) for i in file_list]
我想要达到的结果是:
foldernames = ['F_5500_SF_PART7','F_5500_SF','F_5500','F_SCH_A_PART1']
我认为部分复杂性是我的 file_list 中已经存在正则表达式。 希望更聪明的人可以提供帮助。
您不需要正则表达式,您正在删除固定字符串。 所以你可以只使用str.replace()
方法。
foldernames = [i.replace('_[0-9][0-9][0-9][0-9]_All.zip', '').replace('_[0-9][0-9][0-9][0-9]_all.zip', '') for i in file_list]
需要对replace()
的两个调用来处理All
和all
。 或者,如果文件名的其余部分始终为大写,您可以使用:
foldernames = [i.upper().replace('_[0-9][0-9][0-9][0-9]_ALL.ZIP', '') for i in file_list]
Barmar 的回答最适合您的问题。 但是,如果您确实需要使用正则表达式(假设并非所有文件都具有相同的固定“[0-9][0-9][0-9][0-9]”字符串),那么您可以使用:
'_(\[[-\d]*\]){4}_[aA]ll.zip'
(如果在第一种情况下捕获小写“all”,则末尾的[aA]ll
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.