遍历文件夹提取名称时,如何移除以n开头的数字序列子串?
解决方案:过滤下划线拆分后的特定子串
嘿,这个需求我之前处理过类似的,结合split("_")和简单的过滤逻辑就能轻松搞定。核心就是识别并移除那些以n开头、后面跟纯数字的子串(比如n1、n123这类),下面给你两种实用的实现方式:
方法1:无正则表达式(简单直接)
如果你的需求很明确——就是要去掉严格以'n'开头,且剩余部分全是数字的子串,不用引入正则模块也能搞定,代码更轻量:
folder_name = "930_930_MRTY_2018-30-04_091_FIX_F.42_n1__00001" # 第一步:拆分字符串为列表 parts = folder_name.split("_") # 第二步:过滤掉目标子串,同时可顺便移除空串(连续下划线会生成空元素) filtered_parts = [ part for part in parts if not (part.startswith('n') and part[1:].isdigit()) and part.strip() != '' ] # 可选:把过滤后的部分重新拼接成字符串 cleaned_name = "_".join(filtered_parts) print(cleaned_name) # 输出:930_930_MRTY_2018-30-04_091_FIX_F.42_00001
方法2:正则表达式(更灵活)
如果之后可能遇到更复杂的命名模式(比如n后面带数字和其他特殊字符),用正则表达式会更灵活,能精准匹配符合n+数字格式的子串:
import re folder_name = "930_930_MRTY_2018-30-04_091_FIX_F.42_n1__00001" parts = folder_name.split("_") # 匹配以n开头、后面全是数字的子串(^表示开头,$表示结尾) pattern = re.compile(r'^n\d+$') filtered_parts = [ part for part in parts if not pattern.match(part) and part.strip() != '' ] cleaned_name = "_".join(filtered_parts) print(cleaned_name) # 输出和上面一致
关键细节说明
- 两种方法都加入了
part.strip() != ''的判断,是为了处理原名称中连续下划线(比如n1__00001)拆分后产生的空字符串,如果你不需要移除空串,可以删掉这部分。 - 方法1的
part[1:].isdigit()会自动处理单独的n(比如子串是n),这种情况part[1:]是空字符串,isdigit()返回False,不会被过滤掉——如果你需要过滤单独的n,可以调整判断逻辑为part.startswith('n') and (len(part) >1 and part[1:].isdigit())。
内容的提问来源于stack exchange,提问作者Denver Dang
相关产品推荐
相关产品推荐

