2014-06-18 13 views
1

아래 목록에서 "INCLUDED IN TEAM_COM_BUILD"를 시도하고이 경우 COM_CNSS_BT_LNX.LA.3.6.1.00.00.032, "32"버전을 얻으려고합니다. , 예상 출력은 32이지만 오류 아래로 실행? 그것을 수정하는 방법?목록에서 태그의 버전 번호를 얻는 방법

import re 
comments = [{u'timestamp': 1403046914, u'message': u'Patch Set 1: Looks good to me, but someone else must approve\n\nThis patchset has been processed by the service.', u'reviewer': {u'username': u'service', u'name': u'service Service Account', u'email': u'[email protected]'}}, {u'timestamp': 1403051700, u'message': u'Patch Set 1: Developer Build and Test COMccessful\n\nINCLUDED IN TEAM_COM_BUILD: COM_CNSS_BT_LNX.LA.3.6.1.00.00.032\n\nhttp://qwiki.company.com/div_wcnss/COM_CNSS_BT_LNX.LA.3.6.1.00.00.032', u'reviewer': {u'username': u'user2', u'name': u'USER Prakash Soy', u'email': u'[email protected]'}}, {u'timestamp': 1403052176, u'message': u'Patch Set 1: Looks good to me, approved\n\n', u'reviewer': {u'username': u'username', u'name': u'Alekhya Damera', u'email': u'[email protected]'}}] 
matchobj = re.search("INCLUDED IN TEAM_COM_BUILD: (\s*)$", str(comments), re.MULTILINE) 
print matchobj 
build = matchobj.group(1) 
print build 

chunks = build.split('.') 
print chunks 

last_one = chunks[-1] 
print last_one 

오류 : -

Traceback (most recent call last): 
    File "su_version.py", line 5, in <module> 
    build = matchobj.group(1) 
AttributeError: 'NoneType' object has no attribute 'group' 

답변

2

귀하의 정규 표현식은 잘못된 것입니다. 이것은 작동합니다 : 그것은 줄 바꿈 다음에 . 문자 (일치하는 그룹에서 캡처받을) 하나 개 이상의 숫자 뒤에를 돌 때까지

matchobj = re.search(r"INCLUDED IN TEAM_COM_BUILD: \S+\.(\d+)\\n", str(comments)) 

그것은 탐욕 INCLUDED IN TEAM_COM_BUILD 후 공백이 아닌 문자와 일치합니다. 어느 것이 당신이 원하는지입니다.

편집 : 귀하의 코멘트에 대한 응답으로

, 당신이 사용할 수에 맞게 모두 패턴

matchobj = re.search(r"INCLUDED IN TEAM_COM_BUILD:\s+\S+?\.(?:\d+\.){5}(\d+)(?:\.\d+)?", str(comments)) 

이 첫 번째 인스턴스를 (우리는 비 \S+ 일치하기 때문에 첫 번째 인스턴스를 반환 일치 예를 들어, \S+?을 사용하여),이어서 하나 이상의 숫자 (그룹으로 캡처 됨), , 선택적으로는,이어서 .<one or more digits>을 포함한다. 괄호 안에있는 ?: 문자는 그룹이 캡쳐되지 않음을 의미하고 괄호 뒤에있는 ?은 그룹을 선택적으로 표시합니다.

+0

- 태그가 "COM_CNSS_BT_LNX.LA.3.6.1.00.00.032.1"이라고 말하면 위의 로그는 "1"을 인쇄하고 있고, 여전히 32를 인쇄하고 싶습니다. 어떻게해야합니까? –

+0

@ user3682248 그 질문에 대한 답변을 편집했습니다. – dano

관련 문제