我想要删除不属于以下字符的字符:字母,数字或空格。
我尝试使用[: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!
但不好。
答案 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 "