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

求助:如何用正则表达式提取列表中文件的主名称

提取文件主名称的解决方案

没问题,我来帮你搞定这个从路径列表里提取文件主名称的需求!先看一下你的路径结构:每个路径的文件名部分都是[主名称]_[哈希串]-[哈希串]_[JIRA号]_[数字]_histogrambuglines_[数字].diff的格式,主名称就是第一个下划线之前的部分——哪怕主名称里包含点(比如normal.jsp)或者连字符(比如offline-deployer-list)都能准确提取。

下面给你两种实用的实现方式:

方法一:用字符串分割(简洁高效)

这种方法最直接,因为我们只需要把文件名按第一个下划线分割,取第一部分就行:

import os

path_list = [
    '/Users/buggylines/histogram/offline-deployer-list_b7bacc7fdb-0e0e08077c_GERONIMO-2886_635_histogrambuglines_635.diff',
    '/Users/buggylines/histogram/normal.jsp_aa0c2c26dd-90188cc2a4_GERONIMO-4597_1293_histogrambuglines_1293.diff',
    '/Users/buggylines/histogram/hbase-env.sh_aa0c2c26dd-90188cc2a4_GERONIMO-4597_1293_histogrambuglines_1293.diff'
]

for path in path_list:
    # 先剥离目录,拿到纯文件名
    filename = os.path.basename(path)
    # 只分割第一个下划线,取第一部分就是主名称
    main_name = filename.split('_', 1)[0]
    print(main_name)

运行结果会输出:

offline-deployer-list
normal.jsp
hbase-env.sh

方法二:用正则表达式(灵活适配复杂格式)

如果之后文件名格式有变化,正则的灵活性会更有用。这里我们用正则匹配文件名开头到第一个下划线的所有内容:

import os
import re

path_list = [
    '/Users/buggylines/histogram/offline-deployer-list_b7bacc7fdb-0e0e08077c_GERONIMO-2886_635_histogrambuglines_635.diff',
    '/Users/buggylines/histogram/normal.jsp_aa0c2c26dd-90188cc2a4_GERONIMO-4597_1293_histogrambuglines_1293.diff',
    '/Users/buggylines/histogram/hbase-env.sh_aa0c2c26dd-90188cc2a4_GERONIMO-4597_1293_histogrambuglines_1293.diff'
]

# 正则模式:匹配字符串开头到第一个下划线的非贪婪内容
name_pattern = re.compile(r'^(.+?)_')

for path in path_list:
    filename = os.path.basename(path)
    match_result = name_pattern.match(filename)
    if match_result:
        main_name = match_result.group(1)
        print(main_name)

这个正则的逻辑是:

  • ^ 锚定字符串开头,避免匹配中间的下划线
  • (.+?) 非贪婪匹配任意字符,直到遇到第一个_
  • _ 作为分隔符,确保我们只取到主名称部分

两种方法都能完美解决你的问题,根据自己的习惯选就行~

内容的提问来源于stack exchange,提问作者YusufUMS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:40:10