2013-06-12 4 views
0

많은 텍스트와 임의의 단어가있는 긴 텍스트 줄이 있는데 그 줄의 유일한 3 자리 숫자에 변수를 할당하고 싶습니다.파이썬의 텍스트 줄에서 3 자리 숫자 찾기

숫자는 줄마다 바뀌지 만 항상 3 자릿수입니다. 라인 파이썬에서 3 자리 숫자 만 검색하는 방법은 무엇입니까? 약 3 자의 단어가있을 수 있으므로 숫자 여야합니다. 내가 변수의 숫자를 원하는이 예에서는

09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000 

= 003

답변

4

트릭 할 것 \b 단어 경계와 정규 표현식 :

re.findall(r'\b\d{3}\b', inputtext) 

는 3 자리 숫자의 목록을 반환합니다.

데모 :

>>> import re 
>>> inputtext = '09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000' 
>>> re.findall(r'\b\d{3}\b', inputtext) 
['003'] 
>>> inputtext = 'exact: 444, short: 12, long: 1234, at the end of the line: 456' 
>>> re.findall(r'\b\d{3}\b', inputtext) 
['444', '456'] 
5

당신은 정규 표현식을 사용할 수 있습니다. 또는 숫자를 찾아 다음 두 문자를 수동으로 확인하십시오.

은 내가 정규 표현식 사용합니다 :

import re 

threedig = re.compile(r'\b(\d{3})\b') # Regular expression matching three digits. 

\b 수단을 "단어 경계"및 (\d{3})는 일치하는 텍스트를 찾을 수 있도록 괄호는 그것을 "그룹"을 만들어, "세 자리"를 의미한다.

이어서하여 검색 :

mo = threedig.search("09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000") 
if mo: 
    print mo.group(1) 

상기 지문 333.

+0

나는이'\의 b'을 모르는, 매우 유용합니다! – Emmanuel

+0

괄호는 전혀 필요하지 않습니다. '\ b' 경계는 어떤 문자도 아닌 * 위치 *와 일치합니다. 따라서 숫자를 구별 할 수 없기 때문에 그룹화가 필요하지 않습니다. –

0

해결책 덕분에 정규 표현식으로는 :

>>> s = "007 09824747 18 n 02 archer 0 bowman 0 003 @ 09640897 n 0000 008" 
>>> r = re.findall(r'(?:[^\d]|\A)(\d{3})(?:[^\d]|\Z)', s) 
>>> r 
['007', '003', '008']