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

Posted

技术标签:

【中文标题】从R中的字符串中删除所有特殊字符?【英文标题】:Remove all special characters from a string in R? 【发布时间】:2012-05-04 21:00:56 【问题描述】:

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

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

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

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

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

基础 R 中的解决方案:

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

【问题讨论】:

“特殊字符”的定义是什么? 我自己的定义是所有非 Unicode 字符 ;-)。但我想很多其他人会不同意。 不妨看看subgsub 函数。 正则表达式 [:punct:] 将完成一半或全部工作 【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

不错的答案 +1 您可能希望将 " " 替换为 "" 否则字符串中有空白区域。 @TylerRinker:是的,尽管 QBik 确实特别要求空格。 如何删除那些疯狂的角色:â í ü Â á? 你需要阅读正则表达式。从我回答中的链接开始,然后阅读?regex?regexpr 尝试用[^a-zA-Z0-9]\\W 替换[^[:alnum:]]【参考方案2】:

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

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

导致

[1] "Abcdeacoauu"

【讨论】:

我必须添加iconv(astr, from="UFT-8", to="ASCII//TRANSLIT"),否则像ç 这样的法语字符会有点好笑。 Windoze 在美国没有工作人员,我得到一个 'NA' ... Sys.getlocale() ... LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252 这有效:str = "Ábcdêãçoàúü"; str = iconv(str, from = '', to = 'ASCII//TRANSLIT'); str; 也可以在windows中使用readlines( data, encoding="UTF-8")【参考方案3】:

将特殊字符转换为撇号,

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

下面的代码删除多余的'''撇号

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

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

【讨论】:

那些已经包含''两个连续撇号的预先存在的代码或cmets呢?那些不会受到影响吗?不需要先保护/转义这些吗?

以上是关于从R中的字符串中删除所有特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在一组字符串中删除 r 中的这些特殊字符:’s,…

从bash中的字符串中删除所有特殊字符和大小写

使用 spark 从 csv 文件中删除所有特殊字符

r 从colnames中删除特殊字符

正则表达式从字符串中删除所有特殊字符?