按大写字母拆分包含拉丁语和 Unicode 的字符串

Split String by Upper Case Consisting of Both Latin and Unicode

基于 Splitting String based on letters case 答案;

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

结果

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

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

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

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