如何将多个正则表达式放入gsub?

时间:2017-09-13 12:59:48

标签: r

我想要删除不属于以下字符的字符:字母,数字或空格。

我尝试使用[:punct:],但它会删除抛光字母。

给定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!

但不好。

2 个答案:

答案 0 :(得分:2)

似乎默认的RE引擎将波兰字符视为标点符号,但Perl不会。

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

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

我将其归类为默认引擎中的错误。

答案 1 :(得分:1)

\p{L}将匹配任何字母,\s将匹配任何空格,制表符或换行符。如果我们使用^对此进行否定,我们可以将所有不匹配替换为""

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

请注意,这些数字也会被删除。如果您想保留这些数字,可以使用\p{P},其中仅匹配

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