1. 정규표현식
정규표현식은 특정한 규칙을 가진 문자열의 패턴을 표현하는 데 사용하는 표현식(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 함수를 사용하여 모든 에러코드 검색하였다.
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) 을 사용한다.
# 참조
정규표현식은 특정한 규칙을 가진 문자열의 패턴을 표현하는 데 사용하는 표현식(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