티스토리 뷰

반응형

 

패턴 추출하기

import re
x = 'My 2 Favorite numbers are 19 and 42'
# x 문자열에서 0부터 9까지의 문자 중 하나,
# 즉 정수가 하나 이상 반복되는 단어를 리스트로 반환
y = re.findall('[0-9]+', x)
print(y)

# 'A', 'E', 'I', 'O', 'U' 로 이루어진 패턴을 찾아 출력
# x 문자열에는 해당되는 패턴이 없으므로 빈 리스트를 반환
# 정규표현식에서는 대, 소문자 구분함
y = re.findall('[AEIOU]+', x)
print(y)

 

프로그램 실행 결과

 

탐욕적 방식의 패턴 찾기

만약 아래의 문장에서 '^F.+:' 패턴을 찾게 되면,

x = 'From: Using the : character'

    - From:

    - From: Using the :

두 문장이 일치하게 된다. 이럴때는 가장 긴 문장을 선택하게 되는데 이를 '탐욕적 방식의 패턴 찾기' 라고 한다. 일치하는 여러 패턴 중 가장 긴 것을 선택한다는 의미이다.

import re
x = 'From : Using the : character'
y = re.findall('^F.+:', x)
print(y)

 

탐욕적 방식의 패턴 찾기로 인해 가장 긴 패턴이 리스트로 반환됨

 

비탐욕적 방식의 패턴 찾기

패턴뒤에 '?' (물음표) 를 붙이면 일치하는 패턴 중 짧은 것을 선택한다.

import re
x = 'From : Using the : character'
y = re.findall('^F.+?:', x)
print(y)

 

비탐욕적 방식의 패턴 찾기로 가장 짧은 패턴이 리스트로 반환됨

 

원하는 부분만 추출하기

다음 코드를 실행하면 '@' 문자 앞뒤로 공백이 아닌 문자가 오는 문자열 패턴을 찾는다. 즉, 이메일주소 패턴이 리스트로 반환된다.

import re
x = 'From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008'
y = re.findall('\S+@\S+', x)
print(y)

 

이메일주소 패턴 추출

 

소괄호를 사용하면 From 으로 시작하는 이메일주소 패턴에서 이메일만 추출할 수도 있다.

import re
x = 'From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008'
y = re.findall('^From (\S+@\S+)', x)
print(y)

 

From 으로 시작하는 라인에서 이메일주소 패턴만 추출

 

END

반응형
댓글
공지사항