2014-03-03 279 views
2

尊敬的用戶計算器中的字符串中的特定位置的空間,添加在大寫和小寫字母

許多人遇到他們需要修改字符串的情況。我看到很多 與字符串修改相關的帖子。但是,我還沒有遇到的解決方案,我正在尋找 。我相信我的帖子對於其他一些將面臨類似 挑戰的R用戶會很有用。我想向熟悉字符串 修改的R用戶尋求一些幫助。

我一直在嘗試修改如下所示的字符串。

x <- "Marcus HELLNERJohan OLSSONAnders SOEDERGRENDaniel RICHARDSSON" 

此字符串中有四個人。姓氏是大寫字母。 四個姓中的三個與名字保持一致(例如,HELLNERJohan)。 我想分隔姓氏和名字以增加空間(例如,HELLNER Johan)。

我想我需要說明一下,如「選擇大寫字母的順序,並且 在最後一個和最後一個大寫字母之間添加空格,如果後面有小寫字母 」。

以下文章可能有點相關,但我還沒有成功編寫代碼。

Splitting String based on letters case

非常感謝您的慷慨支持。

+0

滑雪愛好者,呃?去瑞典! – joran

+0

與「Marcus」搭配的姓氏是什麼? –

+0

@RScriv [Marcus Hellner](http://en.wikipedia.org/wiki/Marcus_Hellner),[Johan Olsson](http://en.wikipedia.org/wiki/Johan_Olsson_(滑雪者))等等。 –

回答

4

這是通過查找和捕獲兩個連續的子模式,第一個由一個大寫字母(一個姓氏的結尾)組成,另一個由大寫然後小寫字母組成(用於指示名字的開始)。在這兩個羣體的任何地方都可以找到,它們被捕獲並被替換爲一個空格(下面的調用中的"\\1 \\2")。

x <- "Marcus HELLNERJohan OLSSONAnders SOEDERGRENDaniel RICHARDSSON" 
gsub("([[:upper:]])([[:upper:]][[:lower:]])", "\\1 \\2", x) 
# "Marcus HELLNER Johan OLSSON Anders SOEDERGREN Daniel RICHARDSSON" 
+0

謝謝你非常喬希。現在我學到了更多的字符串修改。 – jazzurro

0

如果要矢量分離成名稱的矢量,這個分割使用正則表達式字符串以零寬度回顧後和向前斷言。

strsplit(x, split = "(?<=[[:upper:]])(?=[[:upper:]][[:lower:]])", 
    perl = TRUE)[[1]] 
# [1] "Marcus HELLNER"  "Johan OLSSON"  "Anders SOEDERGREN" 
# [4] "Daniel RICHARDSSON" 
+0

非常感謝,藍色。最後,我需要提取每個名字。所以你的建議是非常有幫助的! – jazzurro

相關問題