【发布时间】:2016-07-31 11:42:06
【问题描述】:
我正在尝试构建一个正则表达式来“减少”Java 中字符串中重复的连续子字符串。例如,对于以下输入:
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.”)。
有人能指出我正确的方向吗?理想情况下,此方法的输入将是短段落,而不仅仅是单行。
【问题讨论】:
-
您必须使用正则表达式还是只对有效的解决方案感兴趣?
-
我实际上不必使用正则表达式,我只是认为正则表达式可以轻松找到重复的短语而不仅仅是重复的单词。任何其他解决方案也将受到欢迎!
标签: java regex string duplicates