2017-02-25 1 views
0

이 문자열이 있습니다.Regex - Python27을 사용하여 정확한 자릿수와 단어 일치

P O BOX 32370, CA 92263 

그리고이 정규식 \w{2} \d{5}

하지만 굵게 모두 텍스트를 일치합니다.

는 사실 내가 주를 추출 할 "92263는 P O의 B OX 32370, CA", 및 우편 번호.

텍스트를 시작하고 공백을 넣은 다음 정확한 2 자 영문을 입력 한 다음 공백을 한 다음 정확한 5 자리를 가져 오려고합니다.

+1

당신은 것을 단어 경계 뒤에 오려면'\ b \ w {2} \ d {5} \ b'을 사용하십시오. –

답변

1
당신은 패턴이 단어 문자 선행 또는 후행하지 않도록하기 위해 단어 경계 \b를 추가 (영숫자와 밑줄) 할 수

:

import re 

re.findall(r"\b\w{2} \d{5}\b", "P O BOX 32370, CA 92263") 
#['CA 92263'] 
+0

감사합니다.'\ d {5} \ b'에 4 또는 5 개의 숫자를 가져올 조건을 어떻게 추가 할 수 있습니까? 가능한? – Umair

+0

'{} '에서'\ d {4,5} \ b'와 같이 하한을 지정할 수 있습니다. 이것은 4 자리 또는 5 자리와 일치합니다. – Psidom

0

텍스트 시작과 공간을 잡기 위해, 다음 을 정확한 2알파벳 다음에 하나의 공백, 정확히 5 자리.

불행하게도,이 패턴 \b\w{2} \d{5}\b 또한 귀하의 요구 사항에 맞지 않는 결과를 제공 "P O BOX 32370, 2A 92263"와 같은 문자열에서 일치하는 항목을 찾을 수 있습니다. \w - 모두 일치하는 알파벳 숫자 자입니다.
및이 re.search()match.groupdict() 다음과 같은 방법을 사용 우편 번호를 추출하는 방법 (경기의 모든 명명 된 하위 그룹 얻는다) :

s = 'P O BOX 32370, CA 92263' 
m = re.search(r'\b(?P<state>[a-zA-Z]{2}) (?P<zip_code>\d{5})\b', s) 
result = m.groupdict() if m else '' 

print(result) 

출력 :

{'zip_code': '92263', 'state': 'CA'} 
관련 문제