2016-09-05 3 views
3

Я пытаюсь разделить предложения на основе разных критериев. Я хочу разделить некоторые предложения после «есть», а некоторые после «никогда». Я смог разделить предложения на основе любого из этих условий, но не обоих.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" 

Я хотел бы разделить последнее предложение после «никогда». Я не уверен, как это сделать.

+2

FYI 'strsplit' является векторизация. Нет необходимости в 'apply' – Sotos

+2

Mabye' strsplit (x, «is | never») '? – zx8754

+0

@akrun снова все, что я говорю, это * Возможно * дубликат, в основном оба вопроса хотят использовать оператор OR в regex. Кроме того, хорошо иметь связанные должности. – zx8754

ответ

2

Мы можем использовать регулярные выражения для разделения строк в пространстве после «есть» или «никогда». Здесь (?<=\\bis)\\s+ соответствует одному или нескольким пробелам (\\s+), которые следуют за is или |, чтобы соответствовать пробелам (\\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

Спасибо. Я уже третий! –

Смежные вопросы