繁体   English   中英

如何使用使用给定模式的最后一次出现的正则表达式拆分 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])(?!\1)

在这里,一个! , . , ? 或换行符仅在后面没有完全相同的字符时才匹配。

请参阅正则表达式演示 #1正则表达式演示 #2

查看Java 演示

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");
} 

输出:

我还好吗

是的,我很好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM