2012-11-06 3 views
1

몇 가지 구조체 정의가 포함 된 헤더 파일이 있습니다. 이 파일에서 spesific 구조체를 추출하고 싶습니다. 예를 들어 두 번째 구조체 만 가져와야합니다. 표현 아래중복 된 패턴을 분리하는 방법

typedef struct { 
    int a; 
    int b; 
} first; 

typedef struct { 
    int x; 
int y; 
} second; 

... 
headerText = headerFile.read() 
re.match(r"typedef struct {(.*)} second;", headerText) 
... 

반환

int a; 
    int b; 
} first; 

typedef struct { 
    int x; 
    int y; 

어떻게에만 두 번째 구조체를 얻을 수 있나요? 감사합니다 ...

+1

[욕심이 아닌'. *?'] (http://www.regular-expressions.info/repeat.html) – Bergi

+0

@Bergi 그럴 이유가 없습니다. – Anirudha

+0

언어를 지정해야합니다. – Anirudha

답변

1

사용이 regex 당신이 그룹 싶지 않는 경우

[그룹이없는]

사용이 정규식의 이름을 구조체에 필요한 기타와 second 교체 ..just

typedef struct(?!.*?typedef struct).*?\}.*?\bsecond\b.*?; 

위의 정규 표현식은 typedef struct(?!.*?typedef struct) .. thi 그 복수의 구조체는 [그룹과]


을 캡처

(?:^|\;).*(typedef struct.*?\}.*?\bsecond\b.*?;) 

은 기본적으로 위의 regex 파일의 시작하거나 일치하는 것 중 하나 인 구조체와 일치되지 않도록들 완료 명령문 종결 자 뒤에 필요한 구조체. ;. 이것은 다른 구조체 정의가 결과에 포함되지 않도록 수행됩니다.

(?:^|\;)은 문자열의 타트 또는 ;와 많은 문자 에 그룹

.* 경기 0에서 캡처받을 나던 것은 탐욕

(typedef struct.*?\}.*?\bsecond\b.*?;) 이제 구조체

.*? 경기 0 많은 문자 느리게

에 일치

Group1에는 필수 구조체가 있습니다.

+0

와우! 그것은 일했다 :) – zontragon

+0

@ user1320039 두 번째 정규식은 좋은 것 – Anirudha

+0

이 표현을 설명해 주시겠습니까? 그것은 나를 위해 매우 복잡해 보입니다. – zontragon

관련 문제