2014-12-08 5 views
0

나는 세 번 반복되는 문자열에서 하위 문자열을 찾고 gregexpr을 사용하여 얻은 하위 문자열을 제거합니다. 그러나, 하위 문자열을 찾으려는 시도에서 미리보기를 제거해야합니다. 예를 들어 kajaaaaaaaaaaaa 문자열을 생각해보십시오. 여기서 aaaaaaa, aaa과 함께 출력됩니다. 마지막 세 개가 aaaa에 포함되어 있기 때문에 어떻게 제거 할 수 있습니까? 나는 많이 시도했지만 그것을 할 수 없었습니다. 나는 적어도 세 번 연속적으로 반복되는 하위 문자열을 포착하려고합니다.look ahead ahead in 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

당신의 필요를 이해하는 것은 너무 어렵습니다. 예상 한 ouptut은 무엇입니까? 더 많은 예제를 게시 할 수 있습니까? –

+0

'look ahead ahead in regex' - 정규식을 파싱하고 있습니까? – sln

답변

0

나는 제대로 정규식을 이해한다면 :

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

아무것도 두 경기를 그룹 A의 하나 하나가 될 것입니다 원래

결과 후 3 번 반복 일치하는 "aaa"는 후자를 사용합니다. 반복 그룹을 찾으려면 계속 일치 그룹을 사용해야하므로

+1

'의 S <- '111111111111' > > THR <- 3 > > m <- gregexpr ('() (= \ 1 {3}).?', S, 펄 = TRUE)> > + attr (m [[1]], 'capture.start') + attr (m [[1] 1]], 'capture.length')))); a [nchar (a) == max (nchar (a))]'Null은 그것의 출력을 출력합니다. – user231

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" 
관련 문제