【问题标题】:Removing special characters and spaces from strings从字符串中删除特殊字符和空格
【发布时间】:2021-10-16 22:51:25
【问题描述】:
name1 <- "Adam & Eve"
name2 <- "Spartacus"
name3 <- "Fitness and Health"

我想把名字之间的所有空格和特殊字符如%&amp;,.and这个词去掉,然后把每个字符串都大写,这样名字就变成了:

name1 <- "ADAMEVE"
name2 <- "SPARTACUS"
name3 <- "FITNESSHEALTH"

【问题讨论】:

    标签: r regex string dplyr gsub


    【解决方案1】:

    我们可以使用sub 删除and 字符串,然后使用gsub 删除除字母(大写、小写)以外的所有内容(^)并将大小写转换为大写(toupper

    f1 <- function(x) toupper(gsub("[^A-Za-z]", "", sub("and", "", x, fixed = TRUE)))
    

    -测试

    > f1(name1)
    [1] "ADAMEVE"
    > f1(name2)
    [1] "SPARTACUS"
    > f1(name3)
    [1] "FITNESSHEALTH"
    

    【讨论】:

    • 在不测试单词边界的情况下,这也会删除作为单词一部分的“and”。例如f1("hands") 返回"HS"
    【解决方案2】:

    受 akrun 的回答启发,我们可以创建一个函数并将其应用于向量:

    library(stringr)
    my_function <- function(x){
        x <- str_replace_all(x, "[^A-Za-z0-9]","")
        x <- toupper(x)
        x <- str_remove_all(x, "AND")
        return(x)
    }
    
    my_function(c(name1, name2,name3))
    

    输出:

    [1] "ADAMEVE"       "SPARTACUS"     "FITNESSHEALTH"
    

    【讨论】:

    • 与另一个答案相同,不检查单词边界,这将删除其他单词中的“和”
    【解决方案3】:

    您可以将stringrstr_remove_all() 和“任何非单词字符”的模式("\\D")和单词"and"(此处使用单词边界,\\b)一起使用,然后更改全部为大写,toupper()

    library(stringr)
    
    name1 %>% str_remove_all("\\D|\\band\\b") %>% toupper
    

    如果你想为此定义一个函数,你可以这样做:

    my_function <- function(x) { x %>% str_remove_all ("\\D|\\band\\b") %>% toupper }
    

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 2021-04-23
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2011-04-11
      • 2016-01-23
      相关资源
      最近更新 更多