You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历文件夹提取名称时,如何移除以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:45:15