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

wen*_*wen 14 regex r character gsub

我有一些像这样的句子.

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

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

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

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

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

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

gsub("[special_string]", "", c)
Run Code Online (Sandbox Code Playgroud)

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

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

但是,以下代码不起作用

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

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

谢谢

Bro*_*ieG 21

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


Tyl*_*ker 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+?"
Run Code Online (Sandbox Code Playgroud)


42-*_*42- 5

为了使您的方法起作用,您需要在前导“ [”之后立即加上文字“]”

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

您可以将内部“ [”放置在任何位置。如果您需要排除负号,那么它将排在最后。列出所有这些特殊的预定义字符类之后,请参见?regex页面。