我想删除一个单词重复两次以上的字符。例如
"hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day"
到
"hhaappyy mmoorning friendss, good good day"
我尝试过类似的东西,但它并没有减少到恰好2次重复。
gsub('([[:alpha:]])\\1{2}', '\\1',
'hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day')
#[1] "hhappyyy mmoorning friendsssss, good god day"
谢谢。
答案 0 :(得分:6)
您需要使用{2,}
量词,并在替换中使用两个\1
:
s<-'hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day'
gsub('([[:alpha:]])\\1{2,}', '\\1\\1', s)
# => [1] "hhaappyy mmoorning friendss, good good day"
请参阅R demo。
([[:alpha:]])\\1{2,}
模式匹配并捕获到组1中的字母,然后匹配相同字符的2个或更多个重复。替换模式中的两个\1
用2次出现的char替换整个匹配。使用两个\1
占位符是有效的,因为每个匹配至少有3个相同的字符。
答案 1 :(得分:1)
与WiktorStribiżew相同,但在javascript中,如果您需要,还可以替换每个字符(数字,标点符号)。
var sInput = "hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day";
var sOutput = sInput.replace(/(.)\1{2,}/g, "$1$1");
console.log(sOutput);
答案 2 :(得分:1)
fwiw,这是另一个解决方案:
f = function(x){
x = strsplit(x, '')[[1]]
x = rle(x)
x = rep(x$values, pmin(2, x$lengths))
paste(x, collapse='')
}
示例:
x = "hhaaappppyyyyyyy mmoooooorning friendsssssssssssssss, good goood day"
f(x)
[1] "hhaappyy mmoorning friendss, good good day"
然而,gsub更容易......