如何将重复的字母替换成一个

时间:2018-08-28 10:43:56

标签: r regex

假设我有一个带有这样重复字母的向量:

x <- c("b b b b", "a a ")

我想删除重复的字符,以便每个向量仅包含其一个唯一字符。输出看起来像这样:

"b", "a"

我找到了其他解决方案来删除重复的项目,但是它们都涉及到一个字符向量,而不是一个包含空格的字符串。有什么建议吗?

3 个答案:

答案 0 :(得分:4)

这是一种使用sub的基于正则表达式的方法。首先,我删除字符串中的所有空格。然后,我对以下模式进行替换:

(.)\\1{1,}

,我替换为\\1。此处的逻辑是匹配并捕获单个字母,然后将其以及随后的任何相同字母替换为该单个字母。这样可以有效地满足您的需求。

x <- c("b b b b","a a ")
x <- gsub("\\s+", "", x)

result <- gsub("(.)\\1{1,}", "\\1", x)
result
[1] "b" "a"

Demo

答案 1 :(得分:2)

您可以执行以下操作。 R具有内置常数letters。将x分成单个字符,并根据此子集letters

letters[letters %in% unlist(strsplit(x, ' '))]

[1] "a" "b"

答案 2 :(得分:1)

stringr中的tidyverse是另一个可以在R中使用字符串的漂亮程序包;

library(stringr)
x <- c("b b b b","a a ")
x <- str_replace_all(x, "\\s+", "")
unique(unlist(str_split(x, boundary("character"))))
#> [1] "b" "a"

首先删除所有多余的空格,然后将字符串拆分为字符。

此解决方案较为冗长,但实质上与Tim Biegeleisen的答案相同。尽管我认为对于像我这样的regex新手来说更容易理解。