在R中如何将字符串按照大写字母和小写字母进行分割?

4

我有一个字符向量:

v1 <- c("Firstname LastnameFirstname Lastname", 
"Firstname Lastname", 
"Firstname Lastname", 
"Firstname LastnameFirstname Lastname")

我希望能将小写字母后面跟着大写字母的字符串分割开来,并保留这两个字母。
期望输出为:
[1] "Firstname Lastname" "Firstname Lastname"   "Firstname Lastname"  "Firstname Lastname"  "Firstname Lastname" "Firstname Lastname"

参考StackExchange的示例,我尝试使用strsplit函数和gsub函数:

unlist(strsplit( gsub("([a-z][A-Z])","\\1~",v1), "~" ))

但这并不是在字符之间进行分割,而是在正则表达式匹配到的分割点后进行分割:

[1] "Firstname LastnameF" "irstname Lastname"   "Firstname Lastname"  "Firstname Lastname"  "Firstname LastnameF" "irstname Lastname"  

我该如何在保留两个字符的情况下进行字符拆分?
1个回答

10
我们可以使用正则表达式的前后查找来匹配小写字母(正向回顾后环视 - (?<=[a-z]))后跟随大写字母(正向预查 - (?=[A-Z]))。

(?<=[a-z])(?=[A-Z])

unlist(strsplit(v1, "(?<=[a-z])(?=[A-Z])", perl = TRUE))
#[1] "Firstname Lastname" "Firstname Lastname" "Firstname Lastname" 
#[4] "Firstname Lastname" "Firstname Lastname" "Firstname Lastname"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接