首页 > 解决方案 > 如何优化此正则表达式以在空格和标点符号上分割线(减去撇号)

问题描述

我正在尝试在空格和标点符号上拆分文本行,我已经设法做到了,但它现在在生成的拆分行数组中也包含空格:

public static void main(String[] args) {

        String test = "tim's work 'cool' asdas 'right' three-year-old 123123.";
        String rePattern = "[?,.!\\s]|(?<=\\s)\\'|\\'(?=[^a-zA-Z])";

        String[] arr = test.split(rePattern);

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

例如,上面的 spit 将打印:

tim's
work

cool

asdas

right

所以看起来我正在设法正确地分割标点符号,但它仍然在数组中包含空字符串。如何优化我的正则表达式,使其在拆分时不包含空字符串?

标签: javaregex

解决方案


一种选择是'在每一边用可选的 s 包围空格/句子终止字符集,确保s 在可能的情况下与空格/句子终止符一起'被消耗:split

String rePattern = "'?[?,.!\\s]'?";

输出:

tim's
work
was
cool
asdas
right

请注意,在正则表达式中不需要转义's,至少在字符串分隔符为 的 Java 中不需要转义"。此外,除非您希望使用除纯空格以外的其他空格(例如,换行符、制表符或类似的东西),否则您可以只使用文字空格而不是\\s,如果您喜欢,它更精确和简洁(例如String rePattern = "'?[?,.! ]'?";


推荐阅读