2012-04-24 578 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(..)功能用撇號替換特殊字符

相關問題