2016-09-05 7 views
3

異なる基準に基づいて文を分割しようとしています。私はいくつかの文を "is"の後に分割し、 "never"の後に分割することを検討しています。私はこれらの条件のどちらかに基づいて文を分割することができましたが、両方を分割することはできませんでした。複数の基準を持つR strsplit()

str <- matrix(c("This is line one", "This is not line one", 
       "This can never be line one"), nrow = 3, ncol = 1) 

>str 
    [,1]       
[1,] "This is line one"   
[2,] "This is not line one"  
[3,] "This can never be line one" 

str2 <- apply(str, 1, function (x) strsplit(x, " is", fixed = TRUE)) 

> str2 
[[1]] 
[[1]][[1]] 
[1] "This"  " line one" 


[[2]] 
[[2]][[1]] 
[1] "This"   " not line one" 


[[3]] 
[[3]][[1]] 
[1] "This can never be line one" 

"never"の後に最後の文を分割したいと思います。私はそれを行う方法がわかりません。

+2

FYI 'strsplit'がベクトル化されていない '決して' を削除する場合。 'apply'の必要はありません – Sotos

+2

Mabye' strsplit(x、 "is never") '? – zx8754

+0

@akrunもう一度私はそれが*可能な*重複だと言っている、基本的に両方の質問はOR演算子を正規表現で使用したい。また、関連記事をリンクしておくとよいです。 – zx8754

答えて

2

正規表現のルックアラウンドを使用して、 'is'または 'never'の後のスペースで行を分割することができます。ここで、(?<=\\bis)\\s+は、isまたは|に続く1つまたは複数のスペース(\\s+)と、「never」という単語に続くスペース(\\s+)に一致します。

strsplit(str[,1], "(?<=\\bis)\\s+|(?<=\\bnever)\\s+", perl = TRUE) 
#[[1]] 
#[1] "This is" "line one" 

#[[2]] 
#[1] "This is"  "not line one" 

#[[3]] 
#[1] "This can never" "be line one" 

我々 'は' とも

strsplit(str[,1], "(?:\\s+(is|never)\\s+)") 
#[[1]] 
#[1] "This"  "line one" 

#[[2]] 
#[1] "This"   "not line one" 

#[[3]] 
#[1] "This can" "be line one" 
+1

あなたの答えについての詳細をいくつか追加できますか?それはすべて\\ <=?もの。 –

+1

@ali最初のケースの詳細をいくつか追加しました。 – akrun

+1

ありがとうございます。私はすでに3番目だった:) –

関連する問題