求助:如何用正则表达式提取列表中文件的主名称
提取文件主名称的解决方案
没问题,我来帮你搞定这个从路径列表里提取文件主名称的需求!先看一下你的路径结构:每个路径的文件名部分都是[主名称]_[哈希串]-[哈希串]_[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
相关产品推荐
相关产品推荐

