如何通过三个点或水平省略号分割字符串

4
我在尝试用“...”来分割字符串时遇到了问题。
    String text ="Here…It is safer.";

我尝试了:

String [] output = text.split("[\\...]");
String [] output = text.split("\\.");

还有许多其他问题,但我尚未找到解决方案。

我知道这个问题非常简单,但如果有人能解释一下应该如何使其工作,我将非常高兴。


1
尝试使用 text.split("\\.{2,}|…") - user4910279
3个回答

5

匹配三个点的正则表达式为\\.{3}\\.\\.\\.[.][.][.]\\Q...\\E

[\\...]\\.都可以匹配一个点,因为字符类中重复的字符被视为单个字符。

水平省略号是不同的字符。它不是正则表达式语言中的元字符,因此可以直接匹配而无需转义:

String [] output = text.split("…");

1
或者.split("…|\\Q...\\E") - Bohemian
@Bohemian 谢谢 - 我完全忘记了可以“批发”转义正则表达式块的能力。 - Sergey Kalinichenko

1
一般来说,您可以使用:

在HTML中编写代码。
String[] chunks = text.split("…|\\.{3}");

同时也要去除包围的空格:

String[] chunks = text.split("\\s*(?:…|\\.{3})\\s*");

请查看这个正则表达式演示

如果您需要确保三个点没有被其他点字符包围,您可以添加环视:

String[] chunks = text.split("\\s*(?:…|(?<!\\.)\\.{3}(?!\\.))\\s*");

详情:

  • \s* - 零或多个空格字符
  • (?:...) - 非捕获型分组
  • - 省略号
  • | - 或
  • (?<!\.) - 否定的向后查找,如果当前位置左边紧挨着一个点字符,则匹配失败
  • \.{3} - 三个点字符
  • (?!\.) - 否定的向前查找,如果当前位置右边紧挨着一个点字符,则匹配失败。

查看Java演示:

String text = "Here…It is safer... The end.";
String[] chunks = text.split("\\s*(?:…|\\.{3})\\s*");
System.out.println(Arrays.toString(chunks));
// => [Here, It is safer, The end.]

0

多个点的正则表达式为:

(\.)*

如果我没记错的话,Java需要类似这样的东西:

(\\.)*

编辑:刚注意到您只要求三个点。由于已经有正确的答案,我将在此留下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接