如何在驼峰式大小写的每个大写字母前使用 `strsplit`?

How to use `strsplit` before every capital letter of a camel case?

我想在每个大写字母之前的模式下使用strsplit,并使用正向预测。然而,它也会在 after 之后分裂,我对此感到困惑。此正则表达式与 strsplit 不兼容吗?为什么会这样,要改变什么?

strsplit('AaaBbbCcc', '(?=\p{Lu})', perl=TRUE)[[1]]
strsplit('AaaBbbCcc', '(?=[A-Z])', perl=TRUE)[[1]]
strsplit('AaaBbbCcc', '(?=[ABC])', perl=TRUE)[[1]]
# [1] "A"  "aa" "B"  "bb" "C"  "cc"

预期结果:

# [1] "Aaa" "Bbb" "Ccc"

Demo 中它实际上看起来不错。

理想情况下,它应该在每个 camel case 之前拆分,例如Aa 而不是 AA;有 \p{Lt} 但这似乎根本不起作用。

strsplit('AaaABbbBCcc', '(?=\p{Lt})', perl=TRUE)[[1]]
# [1] "AaaABbbBCcc"

预期结果:

# [1] "AaaA" "BbbB" "Ccc" 

看来加上(?!^)就可以得到想要的结果了

strsplit('AaaBbbCcc', "(?!^)(?=[A-Z])", perl=TRUE)

对于骆驼案例我们可能会做

strsplit('AaaABbbBCcc', '(?!^)(?=\p{Lu}\p{Ll})', perl=TRUE)[[1]]
strsplit('AaaABbbBCcc', '(?!^)(?=[A-Z][a-z])', perl=TRUE)[[1]]  ## or
# [1] "AaaA" "BbbB" "Ccc"