如何用正则从指定关键词后、.xlsx前提取目标字符串?
问题描述
给定以下字符串列表:
strings = [ "1234_4534_41247612_2462184_ASN_ABCDEF_GHI_.xlsx", "1234_4534__sfhaksj_DHJKhd_hJD_41247612_2462184_KOR_PQRST_GHI.xlsx", "12JSAF34_45aAF34__sfhaksj_DHJKhd_hJD_41247612_2f462184_TWN_JKLMN_abcd_OPQ.xlsx", "1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_IND_WXY.xlsx", "1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_IND_WXY_TUV.xlsx", ]
需实现三个核心需求:
- a) 精准识别关键词
ASN、KOR、IND、TWN,提取其后的内容; - b) 仅提取
.xlsx后缀之前的内容; - c) 最终结果不能以下划线开头,但中间可包含下划线。
原尝试代码无法限制提取范围在.xlsx之前,且存在关键词匹配不精准的问题:
import re regex_output = re.compile(r"\_[ASN|KOR|TWN|IND]{3}\_([a-zA-Z\_]+)") for s in strings: print(regex_output.search(s).group(1))
期望输出:
ABCDEF_GHI PQRST_GHI JKLMN_abcd_OPQ WXY WXY_TUV
解决方案
修正后的正则表达式
解决核心问题需要调整正则逻辑,同时满足关键词精准匹配、提取范围限制、结果格式要求:
regex_output = re.compile(r"_(ASN|KOR|TWN|IND)_([^_.][a-zA-Z_]*)(?=\.xlsx)")
各部分作用:
_(ASN|KOR|TWN|IND)_:用分组替代原字符组,精准匹配完整目标关键词(原字符组[ASN|KOR|TWN|IND]{3}会匹配任意三个来自这些字符的组合,比如ANS,不符合需求);([^_.][a-zA-Z_]*):捕获目标内容,[^_.]确保结果不以_或.开头,[a-zA-Z_]*匹配后续合法的字母与下划线;(?=\.xlsx):正向预查,强制捕获内容的末尾紧跟.xlsx,避免包含后缀或多余内容。
完整运行代码
import re strings = [ "1234_4534_41247612_2462184_ASN_ABCDEF_GHI_.xlsx", "1234_4534__sfhaksj_DHJKhd_hJD_41247612_2462184_KOR_PQRST_GHI.xlsx", "12JSAF34_45aAF34__sfhaksj_DHJKhd_hJD_41247612_2f462184_TWN_JKLMN_abcd_OPQ.xlsx", "1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_IND_WXY.xlsx", "1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_IND_WXY_TUV.xlsx", ] regex_output = re.compile(r"_(ASN|KOR|TWN|IND)_([^_.][a-zA-Z_]*)(?=\.xlsx)") for s in strings: match = regex_output.search(s) if match: print(match.group(2))
输出结果
运行代码后将得到期望的输出:
ABCDEF_GHI PQRST_GHI JKLMN_abcd_OPQ WXY WXY_TUV
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

