2016-11-25 47 views
1

我試圖在河中刪除特定的多字節字符正則表達式刪除特定的多字節字符中的R

Multibyte <- "Sungpil_한성필_韓盛弼_Han" 

Multibyte的語言結構「English_Korean_Chinese_English」我想刪除的是隻有韓語單詞或中文單詞(不是兩個)。

,期望的結果可以是:

Sungpil_한성필__Han # Chinese characters were removed. 

Sungpil__韓盛弼_Han # Korean characters were removed. 

有一個簡單的方法,通過使用gsub辦呢?我只知道一種獲取純英文字符的方法。

gsub("[^A-Za-z_]", "", Multibyte) 
[1] "Sungpil___Han" 
+1

你想刪除/保留哪些字符? –

+1

正則表達式處理字符,而不是字節。你有沒有嘗試過使用你需要的實際角色? –

+0

@TimBiegeleisen我指定了問題。謝謝。 –

回答

2

使用PCRE正則表達式和Unicode財產類\p{Hangul}匹配韓文字符回答這個問題本身,是的,你可以做一個單純的gsub嘗試,\p{Han}以匹配中文字符:

> Multibyte <- "Sungpil_한성필_韓盛弼_Han" 
> gsub("\\p{Hangul}+", "",Multibyte, perl=TRUE) 
[1] "Sungpil__韓盛弼_Han" 
> gsub("\\p{Han}+", "",Multibyte, perl=TRUE) 
[1] "Sungpil_한성필__Han" 

請參閱R online demo

但是,如果您具有輸入文本的特定結構,請使用其他解決方案。

+0

太棒了!整潔而簡單。非常感謝。 –

+1

只是供參考:'+'是一個量化符,匹配1個或多個量化子模式。如果你刪除它,它仍然會產生相同的結果,只是它將逐個刪除字符。 –

1

我們可以sub

sub("[^_]+_([A-Za-z]+)$", "_\\1", Multibyte) 
#[1] "Sungpil_한성필__Han" 
+0

謝謝你,akrun。這有幫助,但我不知道是否有一個正則表達式可以識別特定的語言字符。但我很懷疑。 –

+1

@SungpilHan如果R有能力做到這一點,你可能可以定位某些unicode範圍。 –