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

Java 8 正则匹配非单词字符(数字间冒号除外)问题求解

Java 8 正则匹配修复方案

最终正则表达式

Java代码中使用的转义后正则:

String regex = "(?:às|\\W)(?<!\\d:(?=\\d))|[-/](?=\\d)";

规则说明

  • 基础匹配逻辑:命中所有非单词字符用于分割,仅排除左右两侧均为数字的冒号(例如8:00AM中的冒号会被保留)
  • 新增às完整匹配规则,直接将该词作为分割符处理
  • 额外兼容后缀为数字的-、/匹配,适配9/18h、10AM-5PM这类场景的分割需求

问题修复验证

  1. 针对Ven:9中的冒号:该冒号左侧为字母,不符合「左右均为数字」的例外规则,会被正常匹配,解决原有漏匹配问题
  2. 新增的às匹配规则会将该完整词汇作为分割符命中,分割后会自动过滤该词汇,满足需求

测试代码示例

import java.util.Arrays;
import java.util.regex.Pattern;

public class SplitTest {
    public static void main(String[] args) {
        Pattern splitPattern = Pattern.compile("(?:às|\\W)(?<!\\d:(?=\\d))|[-/](?=\\d)");
        String[] testCases = {
                "M-F: 10AM - 6PM",
                "M-D: 9am / 6pm F: 9am / 4pm",
                "Seg-Qui: 08h às 17h Sex: 08h às 16h",
                "L-V: 8:00AM - 6:00PM CST",
                "M, F, 10AM-5PM",
                "Lun-Jeu: 9/18h Ven:9/17h"
        };
        for (String testCase : testCases) {
            String[] splitResult = Arrays.stream(splitPattern.split(testCase))
                    .filter(str -> !str.isBlank())
                    .toArray(String[]::new);
            System.out.printf("原字符串:%s%n分割结果:%s%n---%n", testCase, Arrays.toString(splitResult));
        }
    }
}

内容的提问来源于stack exchange,提问作者Lucas Pedroso Santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:24:10