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

时间:2012-04-24 08:24:49

标签: regex string r character

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

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

regex [:punct:]将完成一半的工作。

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

答案_2:将[^[:alnum:]]替换为[^a-zA-Z0-9]regex中的regexpr
 regex[^a-zA-Z0-9]

3 个答案:

答案 0 :(得分:151)

您需要使用regular expressions来识别不需要的字符。对于最容易阅读的代码,您需要str_replace_all包中的stringr,但基本R中的gsub也适用。

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

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

(基准R等价物为gsub("[[:punct:]]", " ", x)。)

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

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

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

答案 1 :(得分:20)

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

编辑:正如评论中记得的那样,可能需要声明原始字符串的起始编码,通常是UTF-8

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

导致

[1] "Abcdeacoauu"

答案 2 :(得分:4)

将特殊字符转换为撇号,

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

在下面的代码中删除额外的&#39;&#39;&#39;撇号

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

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