如何删除R中给定字符串中的所有特殊字符并用空格替换每个特殊字符?
要删除的特殊字符为:~!@#$%^&*(){}_+:"<>?,./;'[]-=
regex [:punct:]
将完成一半的工作。
â í ü Â á ą ę ś ć
?
答案_2:将[^[:alnum:]]
替换为[^a-zA-Z0-9]
或regex
中的regexpr
:
regex[^a-zA-Z0-9]
答案 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(..)
功能将特殊字符替换为撇号