2017-11-15 2 views
1

를 사용하여 여러 숫자로 구성된 행에서 특정 번호를 추출하지만은 제 6 자리 숫자를 난로서 출력을 얻고제가 여러 참조를 갖는 라인으로 구성 파이썬

import re 
out=['DOT/R9.4x     4616542 rtpbuild x. : 20171111184750 p4 p4burtd review','DOT/dex     4609974 build  ~. : 20171108044757 p4 p4burtd review'] 
for item in out: 
    line=re.findall(r'\d{7}',item) 
    print(line) 

추출해야

을 내가 그래도 필요가없는

[4616542] 
[4609974] 

:

['4616542','2017111','1184750'] 
['4609974','2017110','8044757'] 

하지만 실제로 난 단지 1 7digit 번호의 출력이 필요합니다 남은 번호는 나누어졌습니다.

답변

3

: re.searchSRE_Match를 반환

for item in out: 
    line=re.search(r'\b\d{7}\b',item) 
    print(line.group(0)) 

공지 사항 당신이 첫 번째 항목이 필요하면, 당신은 인덱스 [0] 필요 목적. 또 다른 옵션은 findall에 의해 반환 된 목록에서 첫 번째 값을 추출하는 것입니다.

편집 됨 : \b을 사용하면 더 큰 숫자와 일치하지 않게됩니다 (@Jean 덕분에).

+1

더 나은 : r '\ b \ d {7} \ b "(단어 경계). 더 큰 숫자와 일치하지 않습니다. –

0

목록입니다. 첫 번째 발생을 찾고 있다면 당신은 대신 findallsearch를 사용해야합니다

line=re.findall(r'\d{7}',item)[0] 
+1

약간의 스 니펫을 설명 할 수 있습니까? 또한 공식 문서를 링크 할 수도 있습니다. – aloisdg

0
import re 
out=['DOT/R9.4x     4616542 rtpbuild x. : 20171111184750 p4 p4burtd review','DOT/dex     4609974 build  ~. : 20171108044757 p4 p4burtd review'] 
for item in out: 
    line=re.findall(r'\d{7}',item)[0] 
    print([int(line)]) 
0

findall은()는 모든 성냥을 찾아 하나의 일치를 나타내는 각각의 문자열로, 문자열들을리스트로 반환한다.

findall()은 목록 (목록은 iterables 임)을 반환하고 str 개체를 반환합니다. 의 확인하자 :

import re 
    out=['DOT/R9.4x     4616542 rtpbuild x. : 20171111184750 p4 p4burtd review','DOT/dex     4609974 build  ~. : 20171108044757 p4 p4burtd review'] 
    for item in out: 
     line=re.findall(r'\d{7}',item) 
     for i in line: 
      print(i) 

출력 :

4616542 
2017111 
1184750 
4609974 
2017110 
8044757 

그래서 대신 첫 경기에 대한 findall은 사용 re.search :

한 줄 솔루션 :

print([re.search(r'\d{7}',item).group() for item in out]) 

출력 :

['4616542', '4609974'] 
관련 문제