正则表达式 - 在句子中创建连续的单词

时间:2014-11-04 07:00:24

标签: regex r pcre

我有一个字符串:

t="abc,mno,pqr,xyz,qwe,asd"

我希望所有可能的3个连续单词作为输出,如下所示:

"abc mno pqr,mno pqr xyz,pqr xyz qwe,xyz qwe asd"

我正在使用R,所以要使用perl正则表达式引擎。

有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:6)

好的我自己弄清楚了,

t="abc,mno,pqr,xyz,qwe,asd"
t=gsub("(?=,([^,]*),([^,]*))", " \\1 \\2", t, perl=T)
t=gsub("(,[^,]*,[^,]*)$", "", t, perl=T)
t
"abc mno pqr,mno pqr xyz,pqr xyz qwe,xyz qwe asd"

答案 1 :(得分:3)

这是一个非正则表达式的解决方案

t <- "abc,mno,pqr,xyz,qwe,asd" 
library(zoo)
paste(rollapply(strsplit(t, ",")[[1]], width = 3, FUN = paste, collapse = " "), collapse = ",")
## [1] "abc mno pqr,mno pqr xyz,pqr xyz qwe,xyz qwe asd"

答案 2 :(得分:1)

另一种gsub方法,

> t="abc,mno,pqr,xyz,qwe,asd"
> m <- gsub("(?=,([^,]+),([^,]+)\\b(?!$))", " \\1 \\2", t, perl=TRUE)
> result <- gsub(",(?=(?:[^,]*,)?[^,]*$)", " ", m, perl=TRUE)
> result
[1] "abc mno pqr,mno pqr xyz,pqr xyz qwe,xyz qwe asd"