如何用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.])");
正则规则解释
[\\s,]+:匹配逗号或一个/多个连续空格,作为直接分隔符,和原逻辑一致(?<=[^\\d.])(?=\\d):仅在「非数字、非点的字符」后面紧跟数字时分割(比如cd76253里的d和7之间)(?<=\\d)(?=[^\\d.]):仅在数字后面紧跟「非数字、非点的字符」时分割(比如eribfuer243里的r和2之间)
这两个断言会自动跳过数字和点相邻的情况(如19.或.05),因此19.05.1976会被完整保留。
验证结果
运行代码后,输出数组与期望完全一致:
{"ab","cd","76253","eruizgbe","19.05.1976","eribfuer","243","fg"}
内容的提问来源于stack exchange,提问作者midi
相关产品推荐
相关产品推荐

