2017-05-07 29 views
0

使用gsub()或RI substr()由大寫字母標示零件想以下字符串分成使用GSUB

s <- c("IntAssisACTG", "IntFullPSYC", "IntAssocSOC") 

分成三個子部分

(1)爲 「Int」 (2)的下字母集合,以「Int」之後的第一個大寫字母開頭,在下一個大寫字母之前結束,但長度不同(例如「Assis」,「Full」,「Assoc」) (3)其餘的字母,不同長度(例如「ACTG」,「PSYC」,「SOC」)

我希望將三個部分原樣返回,並將其作爲一個向量(例如, 「Int」「Assis」「ACTG」),我已經讀過gsub更適合我需要的東西,因爲它會分裂,而不會丟棄開始每個分割的角色。

我發現這個堆棧溢出

gsub("(?!^)(?=[[:upper:]])", " ", s, perl=T) 

而且越來越接近我想除了什麼(i)其分裂所有首都的最後一段,而我需要他們在一個段(II)我不知道如何它的工作原理

任何幫助表示讚賞。

回答

1

替換爲捕獲組先行,並添加一個量詞:

gsub("(?!^)([[:upper:]]+)", " $1", s, perl=T) 
+0

謝謝@Toto。我想我理解第二個捕獲組。它的內容是:「如果有一個或多個大寫字母,請將空間置於所引用段的前面。那是對的嗎?我不知道第一組「(?!^)」是如何工作的。你能解釋一下嗎? – llewmills

+1

@llewmills:你是對的大號。 '(?!^)'被稱爲負反向保留,它是一個零長度的斷言,假設我們不在字符串的開頭。你會在這裏找到有用的信息:http://www.regular-expressions.info/lookaround html的 – Toto