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

如何用Java正则分割字符串:逗号、空格及数字字母间,不拆分带点日期

Java正则分割字符串:保留日期格式的解决方案

你的核心问题是原正则会误拆分带点的数字组合(如19.05.1976),原因是原规则里的「数字与非数字分界」没有排除点的情况。只需调整断言条件,让分割仅发生在数字和纯字母/符号(非点)之间,同时保留逗号、空格的分割逻辑即可。

修改后的正则代码

写法一(精准排除点的相邻情况)

String input = "ab,cd76253  eruizgbe 19.05.1976, eribfuer243 fg";
String[] result = input.split("[\\s,]+|(?<=\\D)(?=\\d)(?!\\.)|(?<=\\d)(?=\\D)(?<!\\.)");

写法二(用否定字符类简化逻辑)

更简洁的版本,直接指定「非数字且非点」的字符范围:

String[] result = input.split("[\\s,]+|(?<=[^\\d.])(?=\\d)|(?<=\\d)(?=[^\\d.])");

正则规则解释

  1. [\\s,]+:匹配逗号或一个/多个连续空格,作为直接分隔符,和原逻辑一致
  2. (?<=[^\\d.])(?=\\d):仅在「非数字、非点的字符」后面紧跟数字时分割(比如cd76253里的d和7之间)
  3. (?<=\\d)(?=[^\\d.]):仅在数字后面紧跟「非数字、非点的字符」时分割(比如eribfuer243里的r和2之间)

这两个断言会自动跳过数字和点相邻的情况(如19.或.05),因此19.05.1976会被完整保留。

验证结果

运行代码后,输出数组与期望完全一致:

{"ab","cd","76253","eruizgbe","19.05.1976","eribfuer","243","fg"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:35:20