如何使用使用给定模式的最后一次出现的正则表达式拆分 Java 中的字符串列表?

How to split a List of Strings in Java with a regex that uses the last occurrence of given Pattern?

我是正则表达式世界的新手。 给定一个字符串列表作为输入,我想通过使用标点符号模式的正则表达式来拆分它们:"[!.?\n]".

问题是,如果有多个标点符号在一起,我想说明一下:

输入:"I want it now!!!"

输出:"I want it now!!"

输入:"Am I ok? Yeah, I'm fine!!!"

输出:["Am I ok""Yeah, I'm fine!!"]

您可以使用

[!.?\n](?![!.?\n])

此处,!.? 或换行符只有在后面没有跟这些字符中的任何一个时才被匹配。

或者,如果字符必须重复:

([!.?\n])(?!)

此处,!.?或换行符只有在后面没有完全相同的字符时才会被匹配。

参见regex demo #1 and the regex demo #2

看到一个Java demo:

String p = "[!.?\n](?![!.?\n])";
String p2 = "([!.?\n])(?!\1)";
String s = "I want it now!!!";
System.out.println(Arrays.toString(s.split(p)));  // => [I want it now!!]
System.out.println(Arrays.toString(s.split(p2))); // => [I want it now!!]
s = "Am I ok? Yeah, I'm fine!!!";
System.out.println(Arrays.toString(s.split(p)));  // => [Am I ok,  Yeah, I'm fine!!]
System.out.println(Arrays.toString(s.split(p2))); // => [Am I ok,  Yeah, I'm fine!!]

String 的 split() 方法接受正则表达式作为分隔符。

参考:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

示例:

String str = "Am I ok? Yeah, I'm fine!!!";
String delimiters = "[!.?\n]";

String[] splitted = str.split(delimiters);
    
for(String part : splitted) {
   System.out.print(part + "\n");
} 

输出:

Am I ok

Yeah, I'm fine