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

如何用正则从指定关键词后、.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:55:30