我想实现一个R
删除字符串中重复字符的函数.例如,假设我的函数已命名removeRS
,因此它应该以这种方式工作:
removeRS('Buenaaaaaaaaa Suerrrrte')
Buena Suerte
removeRS('Hoy estoy tristeeeeeee')
Hoy estoy triste
Run Code Online (Sandbox Code Playgroud)
我的函数将用于用西班牙语编写的字符串,因此找到具有三个以上连续元音的单词并不常见(或至少是正确的).不用担心他们背后可能存在的情绪.尽管如此,有些单词可以有两个连续的辅音(特别是ll和rr),但我们可以从我们的函数中跳过这个.
因此,总而言之,此函数应该替换仅与该字母连续出现至少三次的字母.在上面的一个例子中,aaaaaaaaa
被替换为a
.
你可以给我任何提示来执行这项任务R
吗?
Yih*_*Xie 32
我没有仔细考虑过这个,但这是我在正则表达式中使用引用的快速解决方案:
gsub('([[:alpha:]])\\1+', '\\1', 'Buenaaaaaaaaa Suerrrrte')
# [1] "Buena Suerte"
Run Code Online (Sandbox Code Playgroud)
()
首先捕获一个字母,\\1
指该字母,+
表示匹配一次或多次; 把所有这些碎片放在一起,我们可以匹配一个字母两次或更多次.
要包括除字母数字之外的其他字符,请[[:alpha:]]
使用匹配任何内容的正则表达式替换.
我认为你应该注意问题描述中的含糊之处.这是第一次尝试,但它显然不能以你想要的方式与"好运"一起工作:
removeRS <- function(str) paste(rle(strsplit(str, "")[[1]])$values, collapse="")
removeRS('Buenaaaaaaaaa Suerrrrte')
#[1] "Buena Suerte"
Run Code Online (Sandbox Code Playgroud)