2017-09-13 47 views
1

我想擦除不是字母,數字或空格之一的字符。我試過[:punct:],但它擦除了波蘭語字母。如何將多個正則表達式放入gsub?

鑑於textToClean <- "polish letters: ł Ł; ż Ż ź Ź ą Ą ę Ę ó Ó ń Ń ć Ć 43434 ; ; ;!"

我想作爲輸出: polish letters ł Ł ż Ż ź Ź ą Ą ę Ę ó Ó ń Ń ć Ć 43434

我嘗試這樣做:

textToClean <- "polish letters: ł Ł; ż Ż ą Ą ę Ę ó Ó 43434 ; ; ;!" 
gsub("(\\D)(\\S)(\\W)", "", textToClean) # doesn't work properly! 

這:

textToClean <- "polish letters: ł Ł; ż Ż ą Ą ę Ę ó Ó 43434 ; ; ;!" 
gsub("\\D+\\S+\\W", "", textToClean) # doesn't work properly! 

,但它是不好的。

+1

嘗試'「(\\ D + | \\ S + | \\ W)」'。你可以使用'|'在正則表達式中表示匹配這個_or_。 – Benjamin

+0

不起作用。它現在返回空字符串。 –

+0

要使用'[:punct:]'它需要在一個字符類中,即'gsub(「[[:punct:]]」,「」,textToClean)' – James

回答

1

\p{L}將匹配任何字母和\s將匹配任何空格,製表符或換行符。如果我們否定這與^,我們可以""替換所有非匹配:

gsub("[^\\p{L}\\s]+", "", textToClean, perl = TRUE) 
"polish letters ł Ł ż Ż ą Ą ę Ę ó Ó " 

注意,號碼也將被刪除。如果你想保持這些數字,你可以使用\p{P},它匹配標點符號:

gsub("\\p{P}", "", textToClean, perl = TRUE) 
"polish letters ł Ł ż Ż ą Ą ę Ę ó Ó 43434 " 
2

似乎默認RE引擎看到波蘭字符標點,但Perl的一個沒有。

gsub("[[:punct:]]", "", textToClean) 
[1] "polish letters  ź Ź ę Ę ó Ó ń Ń ć Ć 43434 " 

gsub("[[:punct:]]", "", textToClean, perl=TRUE) 
[1] "polish letters ł Ł ż Ż ź Ź ą Ą ę Ę ó Ó ń Ń ć Ć 43434 " 

我把它歸類爲默認引擎中的一個bug。