我正在尝试在Java中构建一个正则表达式,以“减少”字符串中的重复连续子字符串。例如,对于以下输入:
我想要得到以下输出:
这是我目前的代码:
这对所有重复的子字符串都起作用得很好,除了句子结尾部分:
我了解到我的正则表达式需要在子字符串中的每个单词后面加一个空格,这意味着它无法捕获用句点而不是空格的情况。我似乎找不到解决这个问题的方法,我尝试过调整捕获组并将正则表达式更改为查找空格或句点而不仅仅是空格,但这种解决方案只有在每个重复部分的子字符串后面都有句点时才有效(“nearby.nearby.”)。
有人能指导我正确的方向吗?理想情况下,此方法的输入将是短段落,而不仅仅是一行。
The big black dog big black dog is a friendly friendly dog who lives nearby nearby.
我想要得到以下输出:
The big black dog is a friendly dog who lives nearby.
这是我目前的代码:
String input = "The big black dog big black dog is a friendly friendly dog who lives nearby nearby.";
Pattern dupPattern = Pattern.compile("((\\b\\w+\\b\\s)+)\\1+", Pattern.CASE_INSENSITIVE);
Matcher matcher = dupPattern.matcher(input);
while (matcher.find()) {
input = input.replace(matcher.group(), matcher.group(1));
}
这对所有重复的子字符串都起作用得很好,除了句子结尾部分:
The big black dog is a friendly dog who lives nearby nearby.
我了解到我的正则表达式需要在子字符串中的每个单词后面加一个空格,这意味着它无法捕获用句点而不是空格的情况。我似乎找不到解决这个问题的方法,我尝试过调整捕获组并将正则表达式更改为查找空格或句点而不仅仅是空格,但这种解决方案只有在每个重复部分的子字符串后面都有句点时才有效(“nearby.nearby.”)。
有人能指导我正确的方向吗?理想情况下,此方法的输入将是短段落,而不仅仅是一行。