如何匹配所有国际化文本?

时间:2012-07-06 21:08:12

标签: regex r internationalization

我正在搜索和销毁亚马逊发现令人反感的任务。在过去,我通过使用iconv将“UTF-8”转换为“latin1”来解决这个问题,但我不能这样做,因为它被编码为“未知”:

test <- "Gwena\xeblle M"
> gsub("\xeb","", df[306,"primauthfirstname"] )
[1] "Gwenalle M"
> Encoding(df[306,"primauthfirstname"])
[1] "unknown"

那么正则表达式消除了所有\ x ##代码?

2 个答案:

答案 0 :(得分:3)

我相信这种模式应该有效:

pat <- "[\x80-\xFF]"

test <- c("Gwena\xeblle M", "\x92","\xe4","\xe1","\xeb") 
gsub(pat, "", test, perl=TRUE)
# [1] "Gwenalle M" ""           ""           ""           ""     

<强>解释

它的工作原理是因为字符类"[\x00-\xFF]"将匹配\x##形式的所有字符。但是前半部分 - 第0到第127(或00'到7F'以十六进制数字表示) - 是the ASCII characters。所以它是它们的后半部分 - 在十六进制模式中的第128到第255(或80'到FF') - 你要搜索并销毁。

答案 1 :(得分:2)

我通过iconvlist()循环了一下,发现了这个(以及其他组合):

test<-"Gwena\xeblle M"
iconv(test,"CP1163","UTF-8")
 [1] "Gwenaëlle M"

我意识到,这不是你要求的,但可能找到正确的编码。