web-dev-qa-db-ja.com

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)

保持したい少数の文字を除き、特殊文字を削除するにはどうすればよいですか?

ありがとう

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

メソッドを機能させるには、先頭の「[」の直後にリテラル「]」を配置する必要があります

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

内側の「[」をどこにでも置くことができます。マイナスを除外する必要がある場合は、最後にする必要があります。これらの特別な事前定義文字クラスがすべてリストされた後、?regexページを参照してください。

5
42-

私はあなたが正規表現ソリューションを求めていると思います。面倒な解決策とパッケージアドオンソリューションを提供します(恥知らずな自己宣伝)。

おそらくより良い正規表現があります:

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