2014-12-08 2 views
0

Я нахожу строку sub в строке, повторяя трижды подряд и удаляя полученную подстроку из нее с помощью gregexpr. Однако, пытаясь найти подстроки, мне нужно удалить lookahead. Например, рассмотрим строку kajaaaaaaaaaaaa, здесь aaaa выводит вместе с aaa, aa и a. Поскольку последние три включены в aaaa, как я могу избавиться от них? Я много пробовал, но не смог этого сделать. Я хочу захватить подстроку, повторяющуюся последовательно, по крайней мере трижды в строке.удаление внешнего вида в regex

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

Не могли бы вы опубликовать регулярное выражение вы используете? – ekrah

+1

так сложно понять ваши потребности. Каков ваш ожидаемый результат? Не могли бы вы привести еще несколько примеров? –

+0

'удаление взгляда вперед в регулярном выражении' - вы анализируете регулярное выражение? – sln

ответ

0

Если я правильно понял ваш регулярное выражение правильно:

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

который будет соответствовать ничего повторять три раза после первоначальной

Результат будет два матча группы один для и один для «aaa» использует последний, так как вы должны иметь группу соответствия для поиска повторов

+1

'ы <- '111111111111' > > Thr <- 3 > > т <- gregexpr ('() (= \ 1 {3}).?', С, Perl = TRUE) > > a = unique (mapply (function (x, y) substr (s, x, x + y-1), + attr (m [[1]], 'capture.start'), + attr (m [[ 1]], 'capture.length'))); a [nchar (a) == max (nchar (a))] 'Null выводит его отображение. – user231

0

Мне нужно удалить lookahead.

Просто опустить его, предпросмотр не нужен здесь:

> 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" 
Смежные вопросы