我试图在字符串中找到一个或多个重复的单词。实际上,我试图在字符串中找到一个或多个重复的单词并删除重复。我查看了link1和link2并尝试使用他们的模式,但他们似乎并不适合我。
这就是我所拥有的
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);
这是我的输出:
组:再见开始:8结束:15组(1):再见组:世界世界开始:16结束:27组(1):世界<登记/>
再见再见世界
我对第二行产出的期望是&#34; group:世界世界的开端:16结束:32。
所以,对我来说,似乎只匹配第一个重复的单词。我对模式的理解是\ b - 单词边界,\ w + - 单词或更多单词(我不确定它是否重复了没有空格,即&#39; wordword&#39;或者一个或多个单词重复 WITH 一个空格,即单词&#39;)然后\ b \ s + - 后跟任何空格\ 1 - 分组的单词,最后再次是\ b - 空格。
有人可以向我解释一下发生了什么以及它应该是什么?
谢谢!
答案 0 :(得分:3)
你对正则表达式的理解大多是正确的,除了正则表达式只检查连续两个单词,而不是连续检查两个或更多单词。
要检查两个或更多单词组合你的正则表达式的第二部分并加上一个加号,这样这个单词可以重复两次以上:
\\b(\\w+)\\b(\\s+\\1\\b)+