2017-05-30 37 views
0

我有以下數據如何識別沒有英文字母,數字和「_」的字符串並替換剩下的字符?

s <- c("コハニー", "Cat", "Blue", "زبان","D-1") 

我希望排除那些沒有在英文字母和喜歡的東西「ABC」替換他們的數據。所以我理想輸出

"ABC" "Cat" "Blue" "ABC" "D-1" 

我用下面的代碼,但它無法識別_-。如何在Regex中澄清_-

s[!grepl('^[A-Za-z0-9_]+$', s)] <- 'ABC' 

這給了我:

ABC" "Cat" "Blue" "ABC" "ABC" 

回答

1

你只需要在末尾添加-_,所以它應該是'^[A-Za-z0-9_-]+$

我總是發現regexr.com成爲檢驗出真正有用的這些問題和更多關於正則表達式的知識。

s <- c("????", "Cat", "Blue", "????","D-1") 

s[!grepl('^[A-Za-z0-9\\_\\-]+$', s)] <- 'ABC' 

s 
#> [1] "ABC" "Cat" "Blue" "ABC" "D-1" 
+1

小注意:在某些情況下,你不需要加倍\逃避 - 和_就像這裏:s [!grepl('^ [[:alnum:] _-] + $',s)] < - '' – GlennFriesen

+0

謝謝,我沒有意識到這一點。剛剛更新了答案 – austensen

+1

本來會添加「[[:punct:]」以保留所有ASCII標點符號。 –

3

爲了增強可讀性,我建議使用[:alnum:]趕上字母數字字符,其次是要保持明確的非字母數字字符(如「_-」),像這樣:

s <- c("コハニー", "Cat", "Blue", "زبان","D-1") 
s[!grepl('^[[:alnum:]_-]+$', s)] <- '' 
s 
2

您可以直接在您的角色類中添加_-(無需轉義)。連字符-並不需要進行轉義如果在課堂上,即第一個或最後一個字符

[A-Za-z0-9_-] 

所以,你可以試試這個:

s[!grepl('^[A-Za-z0-9_-]+$', s)] <- 'ABC' 

看看這個R Demo

相關問題