如何用R删除字符串中重复的字符?

nhe*_*121 17 string r

我想实现一个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:]]使用匹配任何内容的正则表达式替换.


42-*_*42- 7

我认为你应该注意问题描述中的含糊之处.这是第一次尝试,但它显然不能以你想要的方式与"好运"一起工作:

removeRS <- function(str) paste(rle(strsplit(str, "")[[1]])$values, collapse="")
removeRS('Buenaaaaaaaaa Suerrrrte')
#[1] "Buena Suerte"
Run Code Online (Sandbox Code Playgroud)