正则表达式字母数字动态分组异常场景解决求助
正则表达式分组提取问题修正需求
基础待处理文本
589011 T CANNELLE FLAVOR 8 538160 TP0597C ORANGE FLAVOR 557137 APL0397C STRAWBERRY FLAVOR 556137 APL0397C STRAWBERRY FLAVOR 545129 1APL0397C MANGO FLAVOR 984320 TRANS DECENAL 533160 TP0597C ORANGE FLAVOR 530373 A PINEAPPLE FLAVOR 059311 A STRAWBERRY FLAVOR 508142 T LEMON FLAVOR 547261 A BLACKBERRY FLAVOR 536564 2T BLUEBERRY STRAWBERRY 055406 A MILK FLAVOR 054945 A BLACKBERRY FLAVOR 983347 SUSTANE 902040 ACETIC ACID
期望分组规则
Group 1(编号及可选字母数字后缀)
589011 T 538160 TP0597C 557137 APL0397C 556137 APL0397C 545129 1APL0397C 984320 533160 TP0597C 530373 A 059311 A 508142 T 547261 A 536564 2T 055406 A 054945 A 983347 902040
Group 2(名称内容)
CANNELLE FLAVOR ORANGE FLAVOR STRAWBERRY FLAVOR STRAWBERRY FLAVOR MANGO FLAVOR TRANS DECENAL ORANGE FLAVOR PINEAPPLE FLAVOR STRAWBERRY FLAVOR LEMON FLAVOR BLACKBERRY FLAVOR BLUEBERRY STRAWBERRY MILK FLAVOR BLACKBERRY FLAVOR SUSTANE ACETIC ACID
已测试的正则表达式
(\d+\s?[A-Z0-9]*)\s+([A-Z\s]+)\s^([0-9\s]+(?:[A-Z0-9]+)?)\s(?:[A-Z\s]+)
异常场景及问题
当处理带后续数字参数的文本时,分组出现错误:
异常待处理文本
988320 TRANS DECENAL 1 KGM 12164500 JC4 20.0000 KILO 263.98/KG 5,279.60 903040 ACETIC ACID 1 KGM 12164500 DJ4 100.0000 KILO 3.17/KG 317.00
期望分组结果
Group 1
988320 903040
Group 2
TRANS DECENAL ACETIC ACID
实际错误分组结果
Group 1
988320 TRANS 903040 ACETIC
Group 2
DECENAL ACID
修正后的正则表达式及解释
使用以下正则表达式可以同时兼容两种场景:
^(\d+(?:\s[A-Z0-9]+)?)\s+([A-Z\s]+?)(?=\s+\d|$)
匹配逻辑说明
- Group 1:
- 从行首匹配纯数字编号,
(?:\s[A-Z0-9]+)?匹配可选的空格+字母数字后缀(非捕获组避免多余分组),确保只提取编号和其直接关联的后缀内容。
- 从行首匹配纯数字编号,
- Group 2:
- 用非贪婪模式
[A-Z\s]+?匹配名称内容,避免过度消耗字符; - 正向预查
(?=\s+\d|$)作为停止条件:当匹配到「空格+数字」或者行尾时停止,既适配基础场景末尾的数字,也能截断后续的参数内容,防止把参数混入名称分组。
- 用非贪婪模式
内容的提问来源于stack exchange,提问作者Gdaimon
相关产品推荐
相关产品推荐

