如何删除R中的特定特殊字符

时间:2014-02-08 03:29:20

标签: r regex character gsub

我有一些像这样的句子。

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)

我应该怎么做才能删除特殊字符,除了一些我要保留的字符?

由于

3 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:5)

我认为您是在使用正则表达式解决方案之后。我会给你一个凌乱的解决方案和一个包添加解决方案(无耻的自我推销)。

可能是一个更好的正则表达式:

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+?"

答案 2 :(得分:4)

为了使你的方法有效,你需要在领先的“[”

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

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