2016-12-28 69 views
0

我有一個字符向量,其中一些名字和姓氏用空格分開,有些則不用。我需要用空格分隔那些名字和姓氏不分開的字符串。每個名字都以大寫字母開頭。使用r中的gsub分隔綁定的首字母和姓氏

例如在

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

我想喬治和林戈的名字被一個空格分開,而離開約翰的原樣。

尋找後,所以我嘗試

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

但產生

"Jo hn Le nnon" "Ri ngoSt arr" 

說實話,我沒有線索我在做什麼,當談到正則表達式(只是在亞馬遜上一分鐘前買了一本書,但不能等那麼久)。

幫助非常感謝

回答

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) 
+0

非常感謝你@MichaelChirico。你說我犯了錯誤,但我真的只是複製粘貼來自另一篇文章的語法,希望它可以工作,我完全不知道我在做什麼:)我真的需要正確學習Regex。看起來很有用。 – llewmills

相關問題