Как удалить специальные специальные символы в R

У меня есть такие предложения, как этот.

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)

Что мне делать, чтобы удалить специальные символы, кроме нескольких, которые я хочу сохранить?

Спасибо

Ответ 1

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

Ответ 2

Я думаю, что вы после решения regex. Я дам вам грязное решение и пакетное решение (бесстыдное самореклама).

Вероятно, лучшее регулярное выражение:

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

Ответ 3

Чтобы заставить ваш метод работать, вам нужно поставить литерал "]" сразу после ведущего "["

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

Вы можете поместить внутреннее "[" в любом месте. Если вам нужно исключить минус, тогда это должно быть последним. См. Страницу "regex" после того, как перечислены все специальные специальные классы символов.