148

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

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

我尝试过regex使用[:punct:]模式,但它只删除标点符号。

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

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

基础 R 中的解决方案:

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

3 回答 3

238

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

确切的正则表达式取决于您要执行的操作。您可以只删除您在问题中提供的那些特定字符,但删除所有标点符号要容易得多。

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

(基本 R 等效项是gsub("[[:punct:]]", " ", x)。)

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

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

请注意,构成字母、数字或标点符号的定义会因您所在的地区而略有不同,因此您可能需要进行一些试验才能得到您想要的。

于 2012-04-24T09:01:29.410 回答
53

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

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

这导致

[1] "Abcdeacoauu"
于 2017-08-29T14:26:59.520 回答
12

将特殊字符转换为撇号,

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

下面的代码删除额外的'''撇号

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

使用gsub(..)撇号替换特殊字符的功能

于 2017-12-12T07:19:01.933 回答