我有一些像这样的句子。
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)
我应该怎么做才能删除特殊字符,除了一些我要保留的字符?
由于
答案 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页面。