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

Python正则表达式:多分隔符拆分字符串的特殊场景需求

解决方案

你需要的正则表达式可以通过精准定义每个捕获组来实现,将字符串的各个组成部分分别捕获,再过滤掉不存在的可选部分。

正则模式

r"^([A-Za-z]{3})(-)?([A-Za-z]{3,10})(\d{2})([A-Za-z]{2})?$"

代码实现

import re

# 定义正则模式
split_pattern = r"^([A-Za-z]{3})(-)?([A-Za-z]{3,10})(\d{2})([A-Za-z]{2})?$"

# 测试用例
test_strings = [
    "ABC-QWERT01",
    "ABC-QWERT01DV",
    "ABCQWER01DV"
]

for s in test_strings:
    match_result = re.match(split_pattern, s)
    if match_result:
        # 过滤掉可选组不存在时的None值
        parts = [group for group in match_result.groups() if group is not None]
        print(parts)

输出结果

['ABC', '-', 'QWERT', '01']
['ABC', '-', 'QWERT', '01', 'DV']
['ABC', 'QWER', '01', 'DV']

模式解释

每个捕获组对应字符串的一个规则部分:

  1. ([A-Za-z]{3}):匹配开头固定3个字母(如果需要支持数字或其他字符,可替换为(\S{3})或其他符合需求的字符类)
  2. (-)?:匹配可选的连字符,存在则捕获,不存在返回None
  3. ([A-Za-z]{3,10}):匹配中间3-10个字母
  4. (\d{2}):匹配左侧补零的两位数字(00-99)
  5. ([A-Za-z]{2})?:匹配可选的两位后缀字符,存在则捕获,不存在返回None

你之前的模式问题分析

  • Pattern 1:r"([ -?, \d{2}])+" 逻辑混乱,用了错误的字符类组合,没有按照字符串的结构拆分,仅能匹配零散字符,无法精准识别开头3字符、中间段等核心结构。
  • Pattern 2 & 3:使用了无效的否定字符类语法([^[a-z]{3}]是错误写法),否定字符类只能包含字符集合,不能嵌套正则语法,导致完全无法匹配目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:12:11