여기서는 파이썬의 모듈인 re가 무엇인지 알아보고 간단한 사용 방법을 확인해 보겠습니다.
re란?
re는 파이썬의 표준 라이브러리에 포함된 모듈입니다. 파이썬으로 정규표현식을 처리를 할 때는 보통 re모듈을 사용합니다. 정규표현식 패턴을 사용해서 문자열을 추출하거나, 치환하거나 분리할 수 있습니다.
compile()이란?
compile()은 정규표현식 패턴을 컴파일해서 객체를 돌려줍니다.
※컴파일이란 컴퓨터가 읽을 수 있는 언어로 바꾸어준다는 의미입니다.
import re
regex = re.complie('a')
print(regex)
#출력 결과⇨ re.compile('a')
print(type(regex))
#출력 결과⇨ <class 're.Pattern'>
위에서 type를 출력한 결과를 보면 객체가 re.Pattern이라는 클래스 형이라는 것을 알 수 있습니다.
match() 메서드란?
match메서드는 문자열의 앞부분이 패턴과 일치하는지를 확인을 해줍니다. 앞부분이 매치하는지를 확인한다는 것은 아래의 출력결과를 보면 알 수 있습니다.
import re
regex = re.compile('a')
print(regex.match('ab'))
#출력 결과⇨ <re.Match object; span=(0, 1), match='a'>
print(regex.match('ba'))
#출력 결과⇨ None
ab의 경우 앞부분이 일치했기 때문에 매치하고 있다는 결과(매치 객체)를 반환하고 있지만 ba의 경우 앞부분이 일치하지 않고 있기 때문에 None을 반환하고 있습니다
이메일 주소 형식과 일치하는지 확인하기(메타 문자: [])
정규표현식을 가장 많이 사용하는 패턴 중 하나는 이메일 형식에 일치하는지 확인하는 것입니다. 이메일 형식을 체크하기 위해서 여기서는 메타문자인 []를 사용하겠습니다.
메타문자 '[]' 란?
메타 문자 '[]'를 정규표현식 패턴으로 사용하면 [] 사이에 있는 문자 중 한 개 이상과 매치라는 의미로 사용 됩니다.
import re
regex = re.compile('[abc]')
print(regex.match('ab'))
#출력 결과⇨ <re.Match object; span=(0, 1), match='a'>
print(regex.match('ba'))
#출력 결과⇨ <re.Match object; span=(0, 1), match='b'>
print(regex.match('da'))
#출력 결과⇨ None
위의 출력 결과를 보면 첫 번째는 앞부분이 a와 매치했기 때문에 매치 객체를 반환하고 있습니다. 두 번째는 b와 매치하고 있기 때문에 매치 객체를 반환하고 있습니다.
하지만 'da'의 경우 a나 b나, c가 첫 부분과 일치하지 않기 때문에 None이 반환됩니다. 위의 복습이지만 match 메서드의 경우 첫 부분이 일치하는지 확인하기 때문에 뒤쪽에 a가 있어도 매치되지 않습니다.
이메일 주소 형식과 일치하는지 확인하기
메타문자 안에 -를 사용해서 [a-z] 같이 쓰면 a부터 z까지의 모든 문자를 의미합니다. 거기에 +를 붙여서 [a-z]+라고 쓰면 [a-z]이 한 번 이상 오는 것을 의미합니다.
.에 역슬러시를 같이 쓴 것은 .(점)도 메타문자이기 때문에 메타문자가 아니라 .으로만 쓰겠다는 의미로 붙여주고 있습니다.
import re
regex = re.compile('([a-z]+)@([a-z]+)\.com')
print(regex.match('aaa@bbb.com'))
출력결과⇨ <re.Match object; span=(0, 11), match='aaa@bbb.com'>
print(regex.match('aaabbbcom'))
출력결과⇨ None
위와 결과에서 알 수 있는 것처럼 소문자@소문자.com 형식이 아닌 경우는 매치가 되지 않습니다. 여기서는 이해를 돕기 위해서 정규표현식의 패턴을 소문자만 포함하는 것으로 했지만 실제로 사용되는 정규표현식은 훨씬 복잡합니다. 더 자세히 알고 싶은 분들은 아래의 글을 참고해 주세요.
정규표현식 예제로 이해하기 - 아이디, 이메일, 전화번호, 포트
같이 읽으면 좋은 글