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

如何优化Python正则表达式,提取nnnxnnn格式及后续e开头/纯数字分段

正则优化方案

你可以使用以下优化后的正则表达式实现需求:

r'\d{1,3}x\d{1,3}(?:[-._]e?\d+)+'

正则规则说明

  • \d{1,3}x\d{1,3}:严格匹配你要求的开头nnnxnnn格式,限制数字最多3位,确保x必然存在
  • (?:[-._]e?\d+)+:非捕获组匹配后续内容
    • 分隔符支持你示例中出现的-/./_三种
    • e?\d+匹配可选开头的字母e加数字,同时覆盖e02、03两类你需要提取的子串
    • 结尾的+适配长度可变的场景,支持1个到多个后续片段

如果你需要匹配单独出现的nnnxnnn片段(比如示例中的3x02),只需要把正则末尾的+替换为*即可:r'\d{1,3}x\d{1,3}(?:[-._]e?\d+)*',单独的格式串也会被正常匹配提取。

使用示例(Python环境)

由于Python标准库的re模块不会保留重复捕获组的所有匹配结果,推荐先匹配完整的符合规则的串,再按分隔符拆分提取所有子串:

import re

# 如需匹配单独的nnnxnnn片段,把末尾+换成*即可
pattern = re.compile(r'\d{1,3}x\d{1,3}(?:[-._]e?\d+)+')
test_cases = [
    "alphanumeric 1x01-e02-03-04",
    "hello-char 2x01-02-03_04",
    "hello 3x02 char 2x01-02-03_04",
    "alphanumeric 1x01-e02"
]

for case in test_cases:
    for full_match in pattern.findall(case):
        segments = re.split(r'[-._]', full_match)
        print(f"原串:{case}\n提取结果:{segments}\n")

输出结果

原串:alphanumeric 1x01-e02-03-04
提取结果:['1x01', 'e02', '03', '04']

原串:hello-char 2x01-02-03_04
提取结果:['2x01', '02', '03', '04']

原串:hello 3x02 char 2x01-02-03_04
提取结果:['2x01', '02', '03', '04']

原串:alphanumeric 1x01-e02
提取结果:['1x01', 'e02']

完全覆盖你列出的所有提取需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:08