gpt4 book ai didi

java - 使用正则表达式使用java查找任意数字或重复的单词

转载 作者:行者123 更新时间:2023-11-30 08:02:38 25 4
gpt4 key购买 nike

这不是作业。我只是想学习/精通正则表达式。

我试图在字符串中找到 1 个或多个重复的单词。实际上,我试图在字符串中找到 1 个或多个重复的单词并删除重复的单词。我看过 link1link2并尝试使用他们的模式,但他们似乎不适合我。

这是我的

String pattern = "\\b(\\w+)\\b\\s+\\1\\b";
Pattern p = Pattern.compile(pattern Pattern.CASE_INSENSITIVE);
//This is actually read from console
String input = "Goodbye bye bye world world world";
Matcher m = p.matcher(input);
while(m.fine())
{
System.out.println("group: " + m.group() + " start: " + m.start() + " end: " + m.end());
input = input.replaceAll(m.group(), m.group(1);
}
System.out.println(input);

这是我的输出:
group: bye bye start: 8 end: 15 group(1): bye
group: world world start: 16 end: 27 group(1): world< br/>再见再见世界世界

我对第二行输出的期望是“group: world world world start: 16 end: 32.

所以,对我来说,这似乎只匹配第一个重复的词。我对该模式的理解是\b - 单词边界,\w+ - 一个或多个单词(我不确定它是否重复 WITHOUT 一个空格,即'wordword'或一个或more of the word repeated WITH a space i.e'word word') 然后是\b\s+ - 接着是任何空格\1 - 分组的单词,最后是\b - 再次是空格。

有人可以向我解释发生了什么以及它应该是什么吗?

谢谢!

最佳答案

您对正则表达式的理解基本上是正确的,除了正则表达式只检查连续的两个单词,而不是连续的两个或更多单词。

要检查两个或更多单词,请将正则表达式的第二部分分组并在其后加上一个加号,以便单词可以重复两次以上,如下所示:

\\b(\\w+)\\b(\\s+\\1\\b)+

关于java - 使用正则表达式使用java查找任意数字或重复的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36759499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com