使用r中的gsub用空格分隔绑定的First和Surnames

时间:2016-12-28 22:32:14

标签: r regex gsub

我有一个字符向量,其中一些First和Surnames用空格分隔,有些则不是。我需要用空格分隔那些首字母和姓氏不分开的字符串。每个名字都以首都开头。

e.g。在

x <- c("John Lennon", "GeorgeHarrison", "RingoStarr")

我希望乔治和林戈的名字被一个空格隔开,同时留下约翰的原样。

看了之后我试过了

gsub("([[:upper:]][[:lower:]])", "\\1 \\2", x)

但是产生了

"Jo hn Le nnon" "Ri ngoSt arr" 

说实话,我不知道正常表达方式我正在做什么(刚刚在亚马逊上买了一本书,但不能等那么久)。

非常感谢

1 个答案:

答案 0 :(得分:2)

您可以使用PERL预测:

gsub("([[:lower:]])(?=[[:upper:]])", "\\1 ", x, perl = TRUE)
# [1] "John Lennon"     "George Harrison" "Ringo Starr" 

regex101上了解更多信息,并阅读有关环顾正则表达式here的内容。

在进一步检查你的尝试后,你犯了两个重大错误:

  • 您切换了[:upper:][:lower:]
  • 当你真的想捕捉两个群组时,你只捕获了一个群组

您可以对自己的方法进行细微更改:

gsub("([[:lower:]])([[:upper:]])", "\\1 \\2", x)