2012-04-24 339 views
59

如何删除R中给定字符串中的所有特殊字符并用空格替换每个特殊字符?从R中的字符串中删除所有特殊字符?

特殊字符删除有:[email protected]#$%^&*(){}_+:"<>?,./;'[]-=

regex [:punct:]将会使一半的工作。

问题2:但是如何删除这些外文字符:â í ü Â á ą ę ś ć

ANSWER_2:在regexregexpr更换[^[:alnum:]][^a-zA-Z0-9]
regex[^a-zA-Z0-9]

+4

“特殊字符”的定义是什么? – kohske 2012-04-24 08:28:57

+0

我自己的定义是每个不是Unicode的字符;-)。但我想很多其他人会不同意。 – Joey 2012-04-24 08:31:17

+0

也许看看'sub'或'gsub'函数。 – 2012-04-24 08:53:27

回答

116

您需要使用regular expressions识别不想要的字符。对于最容易读取的代码,您需要从stringr包中获得str_replace_all,但来自基础R的gsub也同样适用。

确切的正则表达式取决于你正在尝试做什么。您可以删除问题中提供的特定字符,但删除所有标点符号会更容易。

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

(碱基r当量是gsub("[[:punct:]]", " ", x)。)

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

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

需要注意的是什么构成一个字母或数字或punctuatution标志会略有不同,这取决于您的语言环境,所以你可能需要尝试一点点地得到你想要什么的定义。

+6

好的答案+1你可能想用'“”替换'''''',否则你的字符串中会有空的空白。 – 2012-04-24 10:50:44

+4

@TylerRinker:虽然QBik特别要求空间,但的确如此。 – 2012-04-24 13:04:04

+2

良好的通话,错过了。 – 2012-04-24 13:40:06

4

而不是使用正则表达式来删除这些“疯狂”的字符,只是将它们转换为ASCII,这将删除重音符号,保持字母。

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

导致

[1] "Abcdeacoauu" 
0

转换的特殊字符,撇号,

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

下面的代码以去除多余的 ''”撇号

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

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

相关问题