在 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)
我有一个字符向量,其中一些名字和姓氏用 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)