我在一个字符串中找到连续重复三次的子字符串,并使用gregexpr
从中删除获取的子字符串。但是,在我尝试查找子字符串时,我需要删除前瞻。例如,考虑一个字符串kajaaaaaaaaaaaa
,此处aaaa
与aaa
,aa
和a
一起输出。由于最后三个包含在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')))
答案 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"