【问题标题】:How to replace repeating alphabets into one如何将重复的字母替换为一个
【发布时间】:2018-08-29 02:52:20
【问题描述】:

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

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

我想删除重复的字符,以便每个向量只包含一个唯一的字符。输出如下所示:

"b", "a"

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

【问题讨论】:

    标签: r regex


    【解决方案1】:

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

    (.)\\1{1,}
    

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

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

    Demo

    【讨论】:

      【解决方案2】:

      您可以执行以下操作。 R 具有内置常量letters。将x 分成单个字符,并在此基础上对letters 进行子集。

      letters[letters %in% unlist(strsplit(x, ' '))]
      
      [1] "a" "b"
      

      【讨论】:

        【解决方案3】:

        另一个在 R 中处理字符串的漂亮包是来自 tidyversestringr

        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 新手来说更容易理解。

        【讨论】:

          猜你喜欢
          • 2023-03-10
          • 2018-12-12
          • 2021-06-26
          • 2018-04-16
          • 1970-01-01
          • 2014-09-10
          • 2015-12-09
          • 2017-09-24
          • 2018-03-19
          相关资源
          最近更新 更多