R语言中含拉丁与Unicode大写字母的字符串分割问题
解决R中多语言大小写字符串分割问题
你的问题根源在于Perl正则模式里的[[:upper:]]字符类默认只匹配ASCII范围内的大写字母(A-Z),而俄语的大写字母(比如Р)属于Unicode范畴的大写字符,不在这个匹配范围内,所以最后一组的分割规则没触发。
这里有个直接有效的解决方案:改用Unicode属性\p{Lu}来匹配任意语言的Unicode大写字母,替换原来的[[:upper:]]。
修正后的代码
lang <- "DeutschEsperantoItalianoNederlandsNedersaksiesNorskРусский" strsplit(lang, "(?!^)(?=\\p{Lu})", perl = TRUE)
执行后会得到正确的分割结果:
[[1]] [1] "Deutsch" "Esperanto" "Italiano" "Nederlands" "Nedersaksies" "Norsk" "Русский"
原理说明
\p{Lu}是Unicode正则属性,全称是Letter, Uppercase,它会匹配所有Unicode标准里定义的大写字母——不管是英语、俄语还是其他语言的大写字符,完美适配你后续要处理的多语言场景。
之前尝试的iconv、Encoding等方法没用,是因为问题根本不在编码转换上,而是正则的匹配范围太窄,换用Unicode属性的正则才是关键。
内容的提问来源于stack exchange,提问作者user6550364
相关产品推荐
相关产品推荐

