정규표현식은 특정한 규칙을 가진 문자열의 패턴을 표현하는 데 사용하는 표현식(Expression)으로 텍스트에서 특정 문자열을 검색하거나 치환할 때 사용된다. 정규표현식의 사용범위는 무궁무진한다. 예를 들어, 웹 페이지에서 전화번호나 이메일 주소를 발췌한다거나 로그파일에서 특정 에러페에지가 들어간 라인들을 찾을 때 정규 표현식을 사용하면 쉽게 구현 할 수 있다.
2. 정규표현식 사용
1) 문자열 검색하기
먼저 파이썬에서 정규표현식을 사용하기 위해서는 re 모듈을 사용한다.
re 모듈의 compile 함수는 정규식 패턴을 입력으로 받아들여 정규식 객체를 리턴하는데, 즉 re.compile(검색할문자열)과 같이 함수를 호출하면 정규식 객체(re.RegexObject 클래스 객체)를 리턴하게 된다.
re.RegexObject 클래스는 여러 메서드들을 가지고 있는데, 이중 여기서는 특정 문자열을 검색하여 처음 맞는 문자열을 리턴하는 search() 메서드를 사용해 본다. 이 search()는 처음 매칭되는 문자열만 리턴하는데, 매칭되는 모든 경우를 리턴하려면 findall()을 사용한다. search()는 검색 대상이 있으면 결과를 갖는 MatchObject 객체를 리턴하고, 맞는 문자열이 없으면 None 을 리턴한다.
2) 전화번호 발췌하기
전화번호의 패턴은 032-232-3245 와 같이 3자리-3자리-4자리로 구성되어 있다고 가정하자. 정규표현식에서 숫자를 의미하는 기호로 \d를 사용한다. 여기서 d는 digit 을 의미하고 0~9 까지의 아무 숫자나 될 수 있다. 따라서 위 전화번호 패턴을 정규식으로 표현하면 \d\d\d-\d\d\d-\d\d\d\d 와 같이 될 수 있다. 아래는 이러한 패턴을 사용하여 전화번호를 발췌하는 예이다.
3) 에러 코드 발췌하기
findall 함수를 사용하여 모든 에러코드 검색하였다.
- \s는 화이트 스페이스를 의미한다. ( \t\n\r\f ) 와 동일하다.
3. 정규식 그룹(Group)
정규 표현식에서 () 괄호는 그룹을 의미한다. 예를 들어, 전화번호의 패턴을 \d(3)-\d(3)-\d(4) 와 같이 표현했을 때, 지역번호 3자를 그룹1으로 하고 나머지 7자리를 그룹2로 분리하고 싶을 때, (\d{3})-(\d{3}-\d{4}) 와 둥근 괄호로 묶어 두 그룹으로 분리할 수 있다.
이렇게 분리된 그룹들은 첫번째 그룹은 group(1), 두번째 그룹은 group(2) 와 같이 사용한다. 그리고 전체 전화번호를 가져올 때는 group() 혹은 group(0) 을 사용한다.
# 참조
- http://pythonstudy.xyz/python/article/401-%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D-Regex