【问题标题】:How to remove specific special characters in R如何删除R中的特定特殊字符
【发布时间】:2014-03-05 16:16:10
【问题描述】:

我有一些这样的句子。

c = "In Acid-base reaction (page[4]), why does it create water and not H+?" 

我想删除除'?&+-/之外的所有特殊字符

我知道如果我想删除所有特殊字符,我可以简单地使用

gsub("[[:punct:]]", "", c)
"In Acidbase reaction page4 why does it create water and not H"

但是,一些特殊字符,例如 + - ?也被删除,我打算保留。

我试图创建一串特殊字符,我可以在这样的代码中使用它

gsub("[special_string]", "", c)

我能做的最好的就是想出这个

cat("!\"#$%()*,.:;<=>@[\\]^_`{|}~.")

但是,下面的代码是行不通的

gsub("[cat("!\"#$%()*,.:;<=>@[\\]^_`{|}~.")]", "", c)

我应该怎么做才能删除特殊字符,除了我想保留的几个?

谢谢

【问题讨论】:

    标签: r regex character gsub


    【解决方案1】:

    为了让你的方法工作,你需要把文字“]”紧跟在前导“[”之后

     gsub("[][!#$%()*,.:;<=>@^_`|~.{}]", "", c)
    [1] "In Acid-base reaction page4 why does it create water and not H+?"
    

    您可以将内部的“[”放在任何地方。如果您需要排除减号,则它需要排在最后。在列出所有这些特殊的预定义字符类后,请参阅 ?regex 页面。

    【讨论】:

      【解决方案2】:
      gsub("[^[:alnum:][:blank:]+?&/\\-]", "", c)
      # [1] "In Acid-base reaction page4 why does it create water and not H+?"
      

      【讨论】:

      • 这确实有效。我只知道 ^ 标志着一行的开始(而 $ 标志着结束)。为什么你用它来表示“保持”?你能解释一下吗?
      • "^" 是字符类否定标记(当它首先出现时)。阅读?regex
      • @user3193265,正如 IShouldBuyABoat 所指出的,字符范围 ([]) 内的 ^ 与外部具有不同的含义。几个其他字符也有不同的含义。例如,?+ 不是字符范围内的特殊字符,但 - 是(所以我们必须转义那个)。在里面,作为第一个字符,它意味着否定,或者除了表达式内部的东西之外的所有东西。如果这回答了您的问题,请考虑检查它是否已回答。谢谢。
      • 似乎不适用于所有特殊字符,例如“•”。似乎还活着……
      【解决方案3】:

      我认为您正在使用正则表达式解决方案。我会给你一个乱七八糟的解决方案和一个附加的解决方案(无耻的自我宣传)。

      可能有更好的正则表达式:

      x <- "In Acid-base reaction (page[4]), why does it create water and not H+?" 
      keeps <- c("+", "-", "?")
      
      ## Regex solution
      gsub(paste0(".*?($|'|", paste(paste0("\\", 
          keeps), collapse = "|"), "|[^[:punct:]]).*?"), "\\1", x)
      
      #qdap: addon package solution
      library(qdap)
      strip(x, keeps, lower = FALSE)
      
      ## [1] "In Acid-base reaction page why does it create water and not H+?"
      

      【讨论】:

        猜你喜欢
        • 2019-04-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-20
        • 2016-06-08
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多