在 r 中使用 gsub 用 space 分隔名字和姓氏

Separating bound First and Surnames with a space using gsub in r

我有一个字符向量,其中一些名字和姓氏用 space 分隔,有些则不是。我需要用 space 分隔名字和姓氏不分隔的那些字符串。每个名字都以大写开头。

例如在

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

我希望 George 和 Ringo 的名字用 space 分开,而 John 的名字保持原样。

看了SO之后我尝试了

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

但这产生了

"Jo hn Le nnon" "Ri ngoSt arr" 

老实说,当涉及到正则表达式时,我不知道自己在做什么(一分钟前刚在亚马逊上买了一本关于它的书,但等不及了)。

非常感谢帮助

您可以使用 PERL 前瞻:

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

regex101 for more, and read about look-around regex here 上探索这个。


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

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

您可以对自己的方法稍作修改:

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