2016-08-24 10 views
-3

に文字ベクトルは、長さ1の次の文字ベクトルを考えてみましょう:分割は2つの部分

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

最初の部分があるべきように私は、二つの部分に分割することを望む:

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

第二1:

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

確かに、人は問題を解決するために正規表現を使用する必要があります。私は正規表現での操作を簡単に学ぶことができるいくつかの洞察力を私に教えてください。どんな助けでも、私は心から感謝しています。

+1

http://regexone.comあなたは基礎を学ぶことができる場所です。 http://regex101.comでperl = TRUEパターンをテストしてください。 –

答えて

1

使用"(?<=[^_])(?=_)"はあなたが必要なものを与える:

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これは、分割位置の制約をさらに指定する必要があることを意味します。しかし、データにあらかじめ分かっているアンダースコアが1つしかないことも考えられます。私はOPがその点について非常に明確ではないと同意する。 – Psidom

+1

まあ、その場合、 '(?= _ [^ _] * $)'を先読みすることができますが、元の質問ははっきりしません。 –

0

正規表現なしでこれを処理することに興味がある場合は、stringrパッケージのstr_splitなどの関数を使用して、この文字列を分割することができます。 strsplit

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

これは期待される結果をもたらさない。また、別のアンダースコアが前のどこかに現れたらどうなりますか? –

関連する問題