2016-08-24 114 views
-3

考慮長度爲1以下字符向量:分割字符向量分成兩個部分

l <- "http://www.idealo.de/preisvergleich/OffersOfProduct/4983410_-iphone-se-64gb-spacegrau-apple.html" 

我希望將其分割成兩個部分,使得第一部分應該是:

p1 <- "http://www.idealo.de/preisvergleich/OffersOfProduct/4983410" 

,第二個:

p2 <- "_-iphone-se-64gb-spacegrau-apple.html" 

當然,人們必須使用正則表達式來解決這個問題。請你能給我一些見解,我可以很容易地學習正則表達式的操作。對於任何幫助,我將衷心感謝。

+1

http://regexone.com在這裏你可以學到的基礎知識。在http://regex101.com上測試perl = TRUE模式。 –

回答

1

使用"(?<=[^_])(?=_)"strsplit爲您提供您所需要的:

strsplit(l, "(?<=[^_])(?=_)", perl = T) 

# [[1]] 
# [1] "http://www.idealo.de/preisvergleich/OffersOfProduct/4983410" 
# [2] "_-iphone-se-64gb-spacegrau-apple.html" 
+0

如果另一個下劃線出現在'_' OP之前想要分裂的地方怎麼辦? –

+0

@WiktorStribiżew這意味着需要指定更多的分割位置約束條件。但數據也可能只包含一個可能事先知道的下劃線。我同意OP對這一點不太清楚。 – Psidom

+1

那麼,我可以補充一點,在這種情況下,你可以使用'(?= _ [^ _] * $)'前瞻,但原始問題並不清楚。 –

0

如果你有興趣處理沒有正則表達式的情況,你可以使用stringr包中的str_split等函數來分隔這個字符串。

library(stringr) 
l <- "http://www.idealo.de/preisvergleich/OffersOfProduct/4983410_-iphone-se-64gb-spacegrau-apple.html" 
split = stringr::str_split_fixed(l,pattern = "_",2) 
p1 = split[1] 
p2 = split[2] 
+0

這不會產生預期的結果。另外,如果另一個下劃線出現在什麼地方呢? –