由大写字母拆分的字符串由拉丁语和Unicode组成

时间:2018-01-28 11:19:16

标签: r regex string unicode stringr

Splitting String based on letters case答案为基础;

lang <- "DeutschEsperantoItalianoNederlandsNedersaksiesNorskРусский"
strsplit(lang, "(?!^)(?=[[:upper:]])", perl = T)

结果

"Deutsch"      "Esperanto"    "Italiano"     "Nederlands"   "Nedersaksies" "NorskРусский"

问题是最后一对没有分开,因为俄语被转换为UTF-8(字符串中会有更多的变化;例如,或多或少维基百科中的所有其他语言)。我检查了在线Regex测试人员和其他SO答案,但他们对R没有太大帮助。在基础R中尝试iconvEncoding变通办法(似乎无法转换为UTF-16;转换为字节没有帮助)。想法?

1 个答案:

答案 0 :(得分:1)

使用unicode属性\p{Lu},表示任何字母表中的大写(u)字母(L)。见http://www.regular-expressions.info/unicode.html

lang <- "DeutschEsperantoItalianoNederlandsNedersaksiesNorskРусский"
strsplit(lang, "(?!^)(?=\p{Lu})", perl = TRUE)