2014-03-19 1 views
3

내가 어떤 파이썬 코드에서 사용하는 정규 표현식 몇 가지 도움이 필요하고, 내가 거의 내가 필요로하는 표현을 만든에 일치하는, 내가 아주 가까운입니다. 여기 내가 사용하는 파이썬 코드입니다 :정규 표현식은 - 여러 줄

import re 

def main(): 

    f = open('/tmp/file', 'r') 
    rexp = re.compile('(?m)^ [*] ''([^ ]+).*\(([^ \)]+)') 
    upgrades = rexp.findall(f.read()) 

    print upgrades 

    f.close() 

main() 

을 그리고 이것은/tmp 디렉토리/파일의 내용이다 :

Software Update Tool 
Copyright 2002-2010 Apple 

2014-03-18 14:31:28.958 softwareupdate[5505:3603] No alternate URLs found for packageId  MobileDevice 
Software Update found the following new or updated software: 
    * SecUpd2014-001-1.0 
     Security Update 2014-001 (1.0), 112751K [recommended] [restart] 
    * Safari6.1.2MountainLion-6.1.2 
     Safari (6.1.2), 51679K [recommended] 
    * iTunesXPatch-11.1.5 
     iTunes (11.1.5), 79522K [recommended] 

나는 다음과 같은 출력을 얻을 수 위의 표현으로 :

[('SecUpd2014-001-1.0\n', '1.0'), ('Safari6.1.2MountainLion-6.1.2\n', '6.1.2'), ('iTunesXPatch-11.1.5\n', '11.1.5')] 
을 출력은 다음과 같이된다, 그래서 내 질문에 대한

, 어떻게 표현을 변경할 수 있습니까?

[('SecUpd2014-001-1.0', '1.0'), ('Safari6.1.2MountainLion-6.1.2', '6.1.2'), ('iTunesXPatch-11.1.5', '11.1.5')] 

비슷한 시나리오가 있었지만 정규식은 매우 구체적인 경향이있어서 도움이되는 것을 찾을 수 없었습니다. 더 많은 정보가 필요하다면, 내가 얻을 수있는 도움을 주시면 감사하겠습니다. 당신의 정규식에서

답변

3

사용 [\n\r] 당신을 위해 트릭을 할 것입니다 캡처 외부로 배치합니다. 승리에 대한

rexp = re.compile('(?m)^ [*] ''([^ ]+)[\n\r].*\(([^ \)]+)') 
             ^^^^^^ 
+0

re 모듈! – YFP

+0

그것은 참으로했던 나를 위해 "트릭을"대단히 감사합니다. :) – sebbe