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

jay*_*.sf 5 regex r strsplit

我想在每个大写字母之前使用strsplitat 模式并使用积极的前瞻。然而它每次都会分裂我对此感到困惑。这个正则表达式与 不兼容吗?为什么会这样以及需要改变什么?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"
Run Code Online (Sandbox Code Playgroud)

预期结果:

# [1] "Aaa" "Bbb" "Ccc"
Run Code Online (Sandbox Code Playgroud)

演示中它实际上看起来不错。

理想情况下,它应该在每个骆驼案例之前分裂,例如Aa和不AA;有\\p{Lt},但这似乎根本不起作用。

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

预期结果:

# [1] "AaaA" "BbbB" "Ccc" 
Run Code Online (Sandbox Code Playgroud)

Giu*_*lin 3

看来通过添加(?!^)就可以得到想要的结果了。

strsplit('AaaBbbCcc', "(?!^)(?=[A-Z])", perl=TRUE)
Run Code Online (Sandbox Code Playgroud)

对于骆驼的情况我们可以做

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