Ответ 1
gsub("[^[:alnum:][:blank:]+?&/\\-]", "", c)
# [1] "In Acid-base reaction page4 why does it create water and not H+?"
У меня есть такие предложения, как этот.
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)
Что мне делать, чтобы удалить специальные символы, кроме нескольких, которые я хочу сохранить?
Спасибо
gsub("[^[:alnum:][:blank:]+?&/\\-]", "", c)
# [1] "In Acid-base reaction page4 why does it create water and not H+?"
Я думаю, что вы после решения 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+?"
Чтобы заставить ваш метод работать, вам нужно поставить литерал "]" сразу после ведущего "["
gsub("[][!#$%()*,.:;<=>@^_`|~.{}]", "", c)
[1] "In Acid-base reaction page4 why does it create water and not H+?"
Вы можете поместить внутреннее "[" в любом месте. Если вам нужно исключить минус, тогда это должно быть последним. См. Страницу "regex" после того, как перечислены все специальные специальные классы символов.