2013-07-04 3 views
0

우선 행복한 독립 기념일! 지원하는 사람들을 위해!누구나 더 나은 솔루션을 제공합니까? 오른쪽에서 왼쪽 정규식. 파이썬을 사용하여

Ab Initio 그래프를 분석 중입니다. 그 이유는 개발자가 그 기능을 설명하는 데 사용한 구성 요소의 이름을 가져와야하기 때문입니다.이 구성 요소의 이름은 다음 줄에서 추출 할 수 있습니다. RFMT :

name ='}}@0|@207000|80000|227000|100000|152000|126000|11654|RFMT: Generate Labels Header|Ab Initio Software|Built-in|1|100|0||6||32769|1|{1|0|}}}' 

내가있는 구성 요소의 이름을 추출하는 정규식을 사용하려고 레이블
헤더 생성합니다.

문제가 온다 :

내 구분 기호 입니다 | 의미 Ab의 론적 소프트웨어, 나는 오른쪽에서 왼쪽으로 정규 표현식을 사용해야합니다. 은 파이썬을 사용하여 그럴 수있는 방법이 있습니다.

내가 가진 가장 좋은 해결책은 모든 것을 뒤집는 것입니다.

name = line[::-1] 
name = re.search('erawtfoS oitinI bA\|(.*?)\|', name, re.IGNORECASE).group(1) 
name = name[::-1] 

내가 원했던 것은 수백 개의 그래프에서 사용하게 될 것이기 때문에 더 효율적으로 만들고 싶습니다. 그리고 그 파일의 대부분은 꽤 큽니다.

+0

는이 정규식 일할 수 : [^ |] * [A-ZA-Z] + [^ |] * –

답변

2

당신은 단지 비 | 문자와 일치하고 Ab Initio... 전에 요소의 확인 lookarounds을 사용할 수조차 내다없이

re.search(r'(?<=[|])[^|]*(?=[|]Ab Initio Software)', name, re.IGNORECASE).group() 

, 당신은 단지 더 명시 적 [^|]*-(.*?)을 변경하는 경우

, 당신은 좋겠 올바른 결과를 얻으십시오. 그러나 탐욕스러운 미리보기 솔루션이 더 효율적일 수 있습니다. 어쨌든, 여기있다 : 구성 요소 이름은 적어도 하나의 문자가 포함 된 경우

re.search(r'[|]([^|]*)[|]Ab Initio Software', name, re.IGNORECASE).group(1) 
+0

와우 그래서 난 정말 regex에 대해 더 많이 알 필요가있다. 고마워. – KarTo

+0

@Kar 당신이 당신의 정규 표현식 기술을 향상시키고 자한다면, 나는 lookaround에 관한 절을 링크 한 튜토리얼을 읽는 것이 좋습니다. –