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

标签 java regex regex-lookarounds

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

问题是,我想指定是否有多个标点符号在一起,如下所示:

输入:“我现在就想要!!!”

输出:“我现在就想要!!”

输入:“我还好吗?是的,我很好!!!”

输出:[“我还好吗”“是的,我很好!!”]

最佳答案

你可以使用

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

这里,!.? 或换行符仅在后面不跟有任何这些字符时才匹配。

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

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

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

请参阅regex demo #1regex 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!!]

关于java - 如何使用使用给定模式最后一次出现的正则表达式来拆分Java中的字符串列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64784610/

相关文章:

由于 RegExp 语法,JavaScript block 注释过早结束

正则表达式对组中的单词进行否定检查

java - 无法使用 Lettuce 连接到本地 Redis 集群

java - 如何在java中排序和打印hashMap

C# webservice 客户端无法与 java 服务器一起使用

javascript - 使用 javascript 查找最后一次出现的字符

java - 使用 Servlet 和 JSP 的最佳设计?

php - 使用 Laravel 4 的 Fluent 或 Eloquent 正则表达式搜索并替换表中的所有行

正则表达式可以单独工作,但在 strsplit 中一起使用时则不起作用

regex - 如何排除正则表达式字符串中间的字符串?