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

如何使用更优雅的正则表达式(含Pandas正则前瞻后顾)提取Python字符串指定内容?

如何用正则表达式优雅提取文件名中最后下划线后的特定部分?

我来帮你搞定这个问题!你的需求是从给定的文件名中提取最后一个下划线之后、.xlsx后缀之前的内容,我们可以用一个简洁的正则表达式完美替代你原来的分步拆分写法。

需求回顾

你需要处理的文件名示例:

  • "1234_4534_41247612_2462184_2131_GHI.xlsx"
  • "1234_4534__sfhaksj_DHJKhd_hJD_41247612_2462184_2131_PQRST.GHI.xlsx"
  • "12JSAF34_45aAF34__sfhaksj_DHJKhd_hJD_41247612_2f462184_2131_JKLMN.OPQ.xlsx"
  • "1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_2131_WXY.TUV.xlsx"

核心要求:
a) 提取目标内容中第一个点(.)前后的字符;
b) 目标内容始终位于最后一个下划线(_)之后;
期望输出:

GHI
PQRST.GHI
JKLMN.OPQ
WXY.TUV

正则表达式解决方案

我们可以使用这个精准的正则模式:r'_([^_]+)\.xlsx$'

模式细节解释:

  • _:自动定位到文件名中的最后一个下划线(因为后续的[^_]+会匹配所有非下划线字符,自然会锁定到最后一个下划线的位置)
  • ([^_]+):捕获组,匹配下划线之后的所有非下划线字符(这正是你需要的关键词部分,包含其中的点)
  • \.xlsx$:匹配结尾的.xlsx后缀,确保我们只截取到这个后缀之前的内容

Python代码实现

用re.search提取捕获组内容,代码简洁且逻辑清晰:

import re

strings = [
    "1234_4534_41247612_2462184_2131_GHI.xlsx",
    "1234_4534__sfhaksj_DHJKhd_hJD_41247612_2462184_2131_PQRST.GHI.xlsx",
    "12JSAF34_45aAF34__sfhaksj_DHJKhd_hJD_41247612_2f462184_2131_JKLMN.OPQ.xlsx",
    "1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_2131_WXY.TUV.xlsx"
]

pattern = r'_([^_]+)\.xlsx$'
for s in strings:
    match_result = re.search(pattern, s)
    if match_result:
        print(match_result.group(1))

运行后会直接输出你想要的结果:

GHI
PQRST.GHI
JKLMN.OPQ
WXY.TUV

为什么这个写法更优雅?

  • 一步到位:无需多次拆分字符串,一个正则就完成定位与提取
  • 鲁棒性强:不管文件名前半段有多少下划线或特殊字符,只要结构符合..._关键词.xlsx就能精准匹配
  • 代码更简洁:减少中间变量操作,逻辑一目了然

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:12:37