Java 8 正则匹配非单词字符(数字间冒号除外)问题求解
Java 8 正则匹配修复方案
最终正则表达式
Java代码中使用的转义后正则:
String regex = "(?:às|\\W)(?<!\\d:(?=\\d))|[-/](?=\\d)";
规则说明
- 基础匹配逻辑:命中所有非单词字符用于分割,仅排除左右两侧均为数字的冒号(例如
8:00AM中的冒号会被保留) - 新增
às完整匹配规则,直接将该词作为分割符处理 - 额外兼容后缀为数字的
-、/匹配,适配9/18h、10AM-5PM这类场景的分割需求
问题修复验证
- 针对
Ven:9中的冒号:该冒号左侧为字母,不符合「左右均为数字」的例外规则,会被正常匹配,解决原有漏匹配问题 - 新增的
à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
相关产品推荐
相关产品推荐

