从 R 中的字符串中删除所有特殊字符?

如何从 R 中的字符串中删除所有特殊字符并用空格替换它们?

要删除的一些特殊字符是: ~!@#$%^&*(){}_+:"<>?,./;'[]-=

我试过 regex[:punct:]模式,但它只能去除句读。

问题2: 以及如何从外语中删除字符,如: â í ü Â á ą ę ś ć

答: 在 regexregexpr函数中,使用 [^[:alnum:]]删除 ~!@#$%^&*(){}_+:"<>?,./;'[]-=,使用 [^a-zA-Z0-9]也删除 â í ü Â á ą ę ś ć

以 R 为基数的解:

x <- "a1~!@#$%^&*(){}_+:\"<>?,./;'[]-="
gsub("[[:punct:]]", "", x)  # no libraries needed
303463 次浏览

您需要使用 正则表达式来识别不需要的字符。对于最容易阅读的代码,您希望使用来自 stringr包的 str_replace_all,尽管来自基本 R 的 gsub也可以很好地工作。

确切的正则表达式取决于您尝试做什么。您可以只删除问题中给出的特定字符,但是删除所有标点符号要容易得多。

x <- "a1~!@#$%^&*(){}_+:\"<>?,./;'[]-=" #or whatever
str_replace_all(x, "[[:punct:]]", " ")

(基数 R 等价于 gsub("[[:punct:]]", " ", x)。)

另一种方法是交换所有非字母数字字符。

str_replace_all(x, "[^[:alnum:]]", " ")

请注意,构成字母、数字或标点符号的内容的定义会根据您的地区略有不同,因此您可能需要进行一些实验以得到您想要的内容。

不要使用正则表达式删除那些“疯狂的”字符,只需将它们转换为 ASCII,它将删除重音符号,但保留字母。

astr <- "Ábcdêãçoàúü"
iconv(astr, from = 'UTF-8', to = 'ASCII//TRANSLIT')

结果就是

[1] "Abcdeacoauu"

将特殊字符转换为撇号,

Data  <- gsub("[^0-9A-Za-z///' ]","'" , Data ,ignore.case = TRUE)

下面的代码它删除额外的’”撇号

Data <- gsub("''","" , Data ,ignore.case = TRUE)

使用 gsub(..)函数将特殊字符替换为撇号