如何使用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
相关产品推荐
相关产品推荐

