web-dev-qa-db-fra.com

Comment supprimer des caractères spéciaux spécifiques dans R

J'ai quelques phrases comme celle-ci.

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

Je souhaite supprimer tous les caractères spéciaux à l'exception de '? & + - /

Je sais que si je veux supprimer tous les caractères spéciaux, je peux simplement utiliser

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

Cependant, certains caractères spéciaux tels que + -? sont également supprimés, que j'ai l'intention de conserver.

J'ai essayé de créer une chaîne de caractères spéciaux que je peux utiliser dans un code comme celui-ci

gsub("[special_string]", "", c)

Le mieux que je puisse faire, c'est de trouver ça

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

Cependant, le code suivant ne fonctionnera tout simplement pas

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

Que dois-je faire pour supprimer des caractères spéciaux, à l'exception de quelques-uns que je souhaite conserver?

Merci

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

Pour que votre méthode fonctionne, vous devez mettre le littéral "]" immédiatement après le premier "["

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

Vous pouvez les mettre n'importe où. Si vous aviez besoin d'exclure moins, il faudrait alors qu'il soit le dernier. Voir la page? Regex après que toutes ces classes de caractères prédéfinies spéciales soient répertoriées.

5
42-

Je pense que vous recherchez une solution regex. Je vais vous donner une solution compliquée et une solution complémentaire de package (auto promotion sans vergogne).

Il y a probablement une meilleure expression régulière:

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+?"
5
Tyler Rinker