在正则表达式中删除前瞻

时间:2014-12-08 16:58:31

标签: regex r

我在一个字符串中找到连续重复三次的子字符串,并使用gregexpr从中删除获取的子字符串。但是,在我尝试查找子字符串时,我需要删除前瞻。例如,考虑一个字符串kajaaaaaaaaaaaa,此处aaaaaaaaaa一起输出。由于最后三个包含在aaaa中,我怎么能摆脱它们?我已经尝试了很多,但一直无法做到。我想捕获一个子串,它连续重复一次,在字符串中至少三次。

s <- 'kajaaaaaaaaaaaa'
m <- gregexpr(sprintf'(?=(.{2,})\\1{2,})',t) s, perl=TRUE)

unique(mapply(function(x, y) substr(s, x, x+y-1), 
              attr(m[[1]], 'capture.start'), 
              attr(m[[1]], 'capture.length')))

2 个答案:

答案 0 :(得分:0)

如果我理解你的正则表达式:

m <- gregexpr('(.)(?=(\1{3}))', s, perl=TRUE)

将匹配原始

之后重复三次的任何内容

结果将是两个匹配组一个用于a,一个用于“aaa”用于后者,因为你必须有一个匹配组来查找重复

答案 1 :(得分:0)

  

我需要删除前瞻。

省略它,这里不需要先行:

> gregexpr('(..+)\\1{2,}', s, perl=TRUE) -> m
> mapply(function(x, y) substr(s, x, x+y-1), attr(m[[1]], 'capture.start')
+                                          , attr(m[[1]], 'capture.length'))
[1] "aaaa"