Basic | 정규표현식, python re 모듈 사용하기
정규표현식이란 무엇인가, 파이썬에서 정규표현식 사용하기 (메타문자, 수량자, 파이썬 모듈 re 사용하기)
모르면 완전 암호 같지만 규칙만 알면 쉬운 정규표현식!
정규표현식(regex)이란
= 정규식
- 문자열에서 특정 문자 조합을 찾기 위한 패턴
- ex. 전화번호, 이메일, 웹사이트 주소를 검색하거나, 형식을 지정할 때 사용
메타 문자
수량자
그룹
- 정규식에서 괄호
()
로 묶음(abc)*de(fg)+
- 그룹 참조하기: \1, \2 등 순서대로
- 그룹 참조하여 정규식에 나타낼 때, 이스케이프 문자 \를 한 번 더 사용해야 함 ` “abc\1”`
파이썬에서 정규식 사용하기
import re
1. findall 함수
re.findall(패턴문자열, 타겟문자열)
- 반환형:
list
- 타겟문자열에서 pattern과 일치하는 것을 모두 찾기
ex. 전화번호 형식 010-xxxx-xxxx 모두 찾기
s = "lee 010-2222-3333 kim 010-5959-5958 park 01011112222"
p = "010-\d{4}-\d{4}"
print(re.findall(p, s))
### >>> ['010-2222-3333', '010-5959-5958']
2. search 함수
re.search (패턴문자열, 타겟문자열)
- 반환형:
Match object
- 전체 문자열 중에 매치되는 오브젝트 찾기
- re.match()와 다른점: match는 선두에 매치되는 문자열이 없으면 None 반환하지만 search는 전체 문자열 탐색
- match object에 group() 함수 사용하여 매치된 결과 확인
s = "tomato"
p = "(to)ma\\1"
m = re.search(p, s)
print(m1.group())
### >>> tomato
3. sub 함수
re.sub(패턴문자열, 대체할 문자열, 타겟문자열)
- 반환형:
string
- 타겟문자열에서 패턴문자열을 찾고 특정 형식으로 대체하기
- 대체할 문자열 파라미터에 정규식 사용 가능
ex. 유효한 전화번호는 vaild! 문구로 대체
s = "lee 010-2222-3333 kim 010-5959-5958 park 01011112222"
p = "(010)\-\d{4}\-(\d{4})"
print(re.sub(p, "\g<1>-****-\g<2>", s))
'''
lee vaild!
kim vaild!
park 01011112222
'''
ex. 전화번호 가운데 네 자리 블라인드(**) 하기
s = "lee 010-2222-3333 kim 010-5959-5958 park 01011112222"
p = "(010)\-\d{4}\-(\d{4})"
print(re.sub(p, "\g<1>-****-\g<2>", s))
'''
lee 010-****-3333
kim 010-****-5958
park 01011112222
'''
g<1>
: 그룹 설정, 앞에서부터 1, 2, 3으로 이름 붙음
Reference
- https://docs.python.org/3/library/re.html