如何从R中的字符串中删除n个相同的字符

How to remove n number of identical characters from string in R

我在 R 中有一个字符串,其中单词是 interspaced,具有随机数的字符 \n:

mystring = c("hello\n\ni\n\n\n\n\nam\na\n\n\n\n\n\n\ndog")

我想替换 n 个重复的 \n 元素,以便单词之间只有一个 space 字符。我目前可以按如下方式执行此操作,但我想要一个更简洁的解决方案:

 mystring %>% 
    gsub("\n\n", "\n", .) %>% 
    gsub("\n\n", "\n", .) %>% 
    gsub("\n\n", "\n", .) %>% 
    gsub("\n", " ", .)

[1] "hello i am a dog"

实现此目标的最佳方法是什么?

我们可以用+表示one or more次重复

gsub("\n+", " ", mystring)
[1] "hello i am a dog"

我们可以使用与 akrun 相同的逻辑 str_replace_all:

library(stringr)
str_replace_all(mystring, '\n+', ' ')
[1] "hello i am a dog"

在这种情况下,您可能会发现 str_squish() 方便。这是为了解决这个确切的问题,而其他解决方案显示了解决更一般情况的好方法。

library(stringr)

mystring = c("hello\n\ni\n\n\n\n\nam\na\n\n\n\n\n\n\ndog")

str_squish(mystring)
# [1] "hello i am a dog"

如果您查看 str_squish() 的代码,它基本上是 str_replace_all().

的包装器
str_squish
function (string) 
{
    stri_trim_both(str_replace_all(string, "\s+", " "))
}

另一种可能的解决方案,基于stringr::str_squish

library(stringr)

str_squish(mystring)

#> [1] "hello i am a dog"