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

Qbi*_*bik 92 regex string r character

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

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

regex 将占一半的工作.

问题2:但是如何从外语中删除这些字符:[:punct:]?

Answer_2:替换â í ü Â á ? ? ? ?为[^[:alnum:]]in ~!@#$%^&*(){}_+:"<>?,./;'[]-=或[^a-zA-Z0-9]:
â í ü Â á ? ? ? ?

Ric*_*ton 164

您需要使用正则表达式来标识不需要的字符.对于最容易阅读的代码,您需要str_replace_all来自stringr包,但是gsub从基础R也可以.

确切的正则表达式取决于您要做的事情.你可以删除你在问题中给出的那些特定字符,但删除所有标点符号要容易得多.

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

(基本R等价物是gsub("[[:punct:]]", " ", x).)

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

str_replace_all(x, "[^[:alnum:]]", " ")
Run Code Online (Sandbox Code Playgroud)

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

  • 很好的答案+1你可能想要用`""替换``"```否则你在字符串中有空白空格. (10认同)
  • @TylerRinker:是的,虽然QBik确实特别要求空格. (8认同)
  • 如何删除remowe那些疯狂的人物:`•á? (8认同)
  • 尝试用 `[^a-zA-Z0-9]` 或可能的 `\\W` 替换 `[^[:alnum:]]`。 (2认同)

Fel*_*nga 22

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

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

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

结果

[1] "Abcdeacoauu"
Run Code Online (Sandbox Code Playgroud)

  • 我不得不添加`iconv(astr, from="UFT-8", to="ASCII//TRANSLIT")`,否则像`ç`这样的法语字符会有点有趣。 (2认同)

小智 6

将特殊字符转换为撇号,

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

在下面的代码中删除多余的撇号

Data <- gsub("''","" , Data ,ignore.case = TRUE)
Run Code Online (Sandbox Code Playgroud)

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