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

如何使用Regex分割存在可选下划线分隔符且可能缺失分隔符的字符串

解决方案

核心思路

你给出的三个拆分段本身有明确的固定格式规则,不需要依赖下划线作为分割标记,直接用正则捕获分组即可兼容下划线缺失的场景。

正则规则说明

使用的正则表达式为 ^([a-z]{3})_?([a-z]{2})_?([a-z]\d{3,4})$,各部分含义:

  • ^ 匹配字符串开头
  • ([a-z]{3}) 第一捕获组,匹配前3个固定小写字母,对应拆分结果p1
  • _? 匹配0个或1个下划线,兼容第一个下划线丢失的情况
  • ([a-z]{2}) 第二捕获组,匹配2个小写字母,对应拆分结果p2
  • _? 匹配0个或1个下划线,兼容第二个下划线丢失的情况
  • ([a-z]\d{3,4}) 第三捕获组,匹配「字母开头+3~4位数字」的后缀,对应拆分结果p3
  • $ 匹配字符串结尾,确保整个字符串符合规则

调整后完整代码

import re

def split_target_str(s):
    pattern = r'^([a-z]{3})_?([a-z]{2})_?([a-z]\d{3,4})$'
    match_result = re.match(pattern, s)
    if not match_result:
        print(f'DATA CORRUPTION - {s}')
        return '', '', ''
    return match_result.groups()

# 测试用例
test_cases = [
    'newtt_j123',
    'new_tt_j1213',
    'newttj1213',
    'new_ttj1213'
]

for str_t in test_cases:
    p1, p2, p3 = split_target_str(str_t)
    if p1:
        print(p1, p2, p3, str_t)

运行输出

new tt j123 newtt_j123
new tt j1213 new_tt_j1213
new tt j1213 newttj1213
new tt j1213 new_ttj1213

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:06:02