我正在尝试使用重复的字符处理字符串,以便在字典中找到正确的单词。
我必须使用的方法是找到包含3个或更多连续字母的单词并将其删除为2个连续字母。
然后我会在字典中查找这个单词是否存在。如果单词不存在,那么我必须将两个连续的字母删除为1个字母。
示例:
gooooooood -> good (this existis)
awesooooome -> awesoome (this doesn't exist) -> awesome (this exists)
aaawwwesooooooommmme -> aawwesoomme (this doesn't exist) -> awesome (this exists)
我正在使用JAVA并且我已经使用这个正则表达式来获取字符串中包含3个或更多重复字母的单词:
Pattern p = Pattern.compile("\\b\\w*(\\w)\\1{2}\\w*");
答案 0 :(得分:1)
您可以使用此正则表达式(“纯版本”):
(\b\w*?)(\w)\2{2,}(\w*)
字符串版本:
"(\\b\\w*?)(\\w)\\2{2,}(\\w*)"
您应该使用replaceAll(regex, "$1$2$2$3")
(\b\w*?) // capture group 1 is lazy
(\w) // capture group 2 captures the first occurrence of the char
\2{2,} // char may occur 2 or more times...
(\w*) // capture group 3
请注意,替换中的$number
是指相应捕获组的内容。
答案 1 :(得分:1)
你也可以这样做:
Pattern pattern = Pattern.compile("(\\w)\\1{2,}");
System.out.println(pattern.matcher("gooooooood").replaceAll("$1$1"));
System.out.println(pattern.matcher("awesooooome").replaceAll("$1$1"));
System.out.println(pattern.matcher("aaawwwesooooooommmme").replaceAll("$1$1"));
<强>输出:强>
good
awesoome
aawwesoomme
第二步,你可以这样做:
Pattern pattern2 = Pattern.compile("(\\w)\\1");
System.out.println(pattern2.matcher("awesoome").replaceAll("$1"));
System.out.println(pattern2.matcher("aawwesoomme").replaceAll("$1"));
<强>输出:强>
awesome
awesome