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

如何拆分包含驼峰文本与连续数字组的字符串并保留数字分组?

问题原因

你当前使用的正则中(?!\\p{Lu})(?=\\d+)逻辑存在缺陷:(?=\\d+)会匹配每一个数字字符前方的位置,因此连续数字会在每个数字前都触发拆分,最终被拆分为单个字符。

解决方案

使用如下支持Unicode的正则即可实现预期拆分效果:

(?=\p{Lu})|(?<=\D)(?=\d)|(?<=\d)(?=\D)

效果验证

对示例字符串"abcDefGhi345J6"执行拆分:

// 示例(Java环境,其他支持Unicode属性转义的环境逻辑一致)
"abcDefGhi345J6".split("(?=\\p{Lu})|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");

输出结果符合预期:

["abc", "Def", "Ghi", "345", "J", "6"]

正则逻辑说明

  • (?=\p{Lu}):正向零宽预查,匹配任意Unicode大写字母前方的位置,实现驼峰拆分,兼容所有语言的大写字母
  • (?<=\D)(?=\d):正向零宽预查,匹配「非数字字符后方、数字字符前方」的交界位置,仅在字母切换到数字时拆分
  • (?<=\d)(?=\D):正向零宽预查,匹配「数字字符后方、非数字字符前方」的交界位置,仅在数字切换到字母时拆分

Shell环境使用说明

如果在Shell中使用该正则,需要确保工具支持Unicode属性转义与零宽断言,推荐使用Perl实现,示例如下:

echo "abcDefGhi345J6" | perl -CSDA -e 'print join(", ", split /(?=\p{Lu})|(?<=\D)(?=\d)|(?<=\d)(?=\D)/, <STDIN>)'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03