如何使用更优雅的正则表达式(含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
相关产品推荐
相关产品推荐

