2017-02-20 2 views
3

세 번째 괄호 세트 사이에 string 부분을 추출하고 싶습니다. 선호하는베이스는 R입니다. 도움이 될 것이 두 가지 결과를괄호의 세 번째 집합 사이의 문자열 추출

my.data <- read.table(text = ' 
    my.num        my.string         my.cov 
     1 Abc(~1)Fgf(~-1+e2:cp)Bca(~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp)q(~-1+re:se) 10 
     2 Abc(~1)Fgf(~-1+e1:e2:fi)Bca(~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi)q(~1)  20 
     3 Abc(~1)Fgf(~1)Bca(~-1+g1+g2+g2:cp)q(~-1+re:se)       15 
', header = TRUE, stringsAsFactors = FALSE) 
my.data 

다음 중 하나를 예를 들면 다음과 같습니다 데이터 세트는

desired.result1 <- read.table(text = ' 
    my.num      my.string   my.cov 
     1 Bca(~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp)  10 
     2 Bca(~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi)  20 
     3 Bca(~-1+g1+g2+g2:cp)      15 
', header = TRUE, stringsAsFactors = FALSE) 
desired.result1 

desired.result2 <- read.table(text = ' 
    my.num      my.string  my.cov 
     1 ~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp  10 
     2 ~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi  20 
     3 ~-1+g1+g2+g2:cp      15 
', header = TRUE, stringsAsFactors = FALSE) 
desired.result2 

내가 regex에 너무 녹슨 나는 내가 어디서부터 시작하기조차 확실하지 오전과 비슷한을 찾을 수 없습니다 인터넷상의 질문. 조언이나 도움을 주셔서 감사합니다.

+1

분할 "(", 최대 깔끔한 세 번째를 얻을 – zx8754

+0

은 수있다 중첩 된 괄호입니까? –

+0

[도움이 될 수 있음] (http://stackoverflow.com/questions/8613237/extract-info-inside-all-paren) Thesis-in-r) – Sotos

답변

3

첫 번째 표현식 :

sub(".*?\\(.*?\\).*?\\(.*?\\)(.*?\\(.*?\\)).*", "\\1", my.data$my.string) 
[1] "Bca(~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp)" "Bca(~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi)" 
[3] "Bca(~-1+g1+g2+g2:cp)" 

두 번째 표현식 : strsplit 사용

sub(".*?\\(.*?\\).*?\\(.*?\\).*?\\((.*?)\\).*", "\\1", my.data$my.string) 
[1] "~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp" "~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi" "~-1+g1+g2+g2:cp" 
4

:.에

sapply(strsplit(my.data$my.string, split = "(", fixed = TRUE), function(i){ 
    strsplit(i[4], split = ")", fixed = TRUE)[[1]][1]}) 

# [1] "~-1+g1+g2:ti+g2:cfi+g2:pp+g2:cp" "~-1+g1+g2:ti+g2:pr+g2:ts+g2:cfi" "~-1+g1+g2+g2:cp" 
+2

또는이'paste0 (sapply (strsplit (my.data $ my.string, '\\)'), '[', 3), ')')'첫 번째 값을 얻으려면 – Sotos

관련 문제