[Python] 정규 표현식(Regular Expression)
정규 표현식(Regular Expression)
정규 표현식은 특정한 규칙을 가진 문자열의 패턴을 표현하는 데 사용하는 표현식(Expression)으로 텍스트에서 특정 문자열을 검색하거나 치환할 때 흔히 사용된다. 예를 들어, 웹페이지에서 전화번호나 이메일 주소를 발췌한다거나 로그파일에서 특정 에러메시지가 들어간 라인들을 찾을 때 정규 표현식을 사용하면 쉽게 구현할 수 있다. 정규 표현식은 간단히 정규식, Regex 등으로 불리우곤 한다.
파이썬에서의 정규 표현식 사용
정규식에서 가장 단순한 것은 특정 문자열을 직접 리터럴로 사용하여 해당 문자열을 검색하는 것이다. 예를 들어, 로그 파일에 "에러 1033" 이라는 문자열을 검색하여 이 문자열이 있으면 이를 출력하고 없으면 None을 리턴하는 경우이다. 이러한 간단한 검색을 파이썬에서 실행하는 방법은 아래와 같다.
먼저 파이썬에서 정규표현식을 사용하기 위해서는 Regex를 위한 모듈인 re 모듈을 사용한다.
re 모듈의 compile 함수는 정규식 패턴을 입력으로 받아들여 정규식 객체를 리턴하는데, 즉 re.compile(정규식) 와 같이 함수를 호출하면 정규식 객체를 리턴하게 된다.
정규식 객체는 여러 메서드들을 가지고 있는데, 특정 문자열을 검색하여 처음 맞는 문자열을 리턴하는 search() 메서드를 사용해보겠다. search()는 처음 매칭되는 문자열만 리턴하는데, 매칭되는 모든 경우를 리턴하려면 findall()을 사용한다. search()는 검색 대상이 있으면 결과를 갖는 MatchObject를 반환하고, 맞는 문자열이 없으면 None을 반환한다.
Match Object의 메소드
group() : MatchObject로부터 실제 결과 문자열을 얻는다
1 2 3 4 5 6 7 | import re text = "감자 500 파 1000 옥수수 200 당근 400" potatoParser = re.compile("감자 500") potato = regex.search(potatoParser ) if potato != None: print(mo.group()) # '감자 500' | cs |
endpos : 일치하는 문자열의 마지막 인덱스를 얻는다
다양한 정규식 패턴 표현
정규 표현식에는 매우 다양한 문법과 기능들이 있다. 아래는 다양한 정규식 표현 중 자주 사용되는 패턴들을 정리한 것이다.
패턴 | 설명 | 예제 |
---|---|---|
^ | 이 패턴으로 시작해야 함 | ^abc : abc로 시작해야 함 (abcd, abc12 등) |
$ | 이 패턴으로 종료되어야 함 | xyz$ : xyz로 종료되어야 함 (123xyz, strxyz 등) |
[문자들] | 문자들 중에 하나이어야 함. 가능한 문자들의 집합을 정의함. | [Pp]ython : "Python" 혹은 "python" |
[^문자들] | [문자들]의 반대로 피해야할 문자들의 집합을 정의함. | [^aeiou] : 소문자 모음이 아닌 문자들 |
| | 두 패턴 중 하나이어야 함 (OR 기능) | a | b : a 또는 b 이어야 함 |
? | 앞 패턴이 없거나 하나이어야 함 (Optional 패턴을 정의할 때 사용) | \d? : 숫자가 하나 있거나 없어야 함 |
+ | 앞 패턴이 하나 이상이어야 함 | \d+ : 숫자가 하나 이상이어야 함 |
* | 앞 패턴이 0개 이상이어야 함 | \d* : 숫자가 없거나 하나 이상이어야 함 |
패턴{n} | 앞 패턴이 n번 반복해서 나타나는 경우 | \d{3} : 숫자가 3개 있어야 함 |
패턴{n, m} | 앞 패턴이 최소 n번, 최대 m 번 반복해서 나타나는 경우 (n 또는 m 은 생략 가능) | \d{3,5} : 숫자가 3개, 4개 혹은 5개 있어야 함 |
\d | 숫자 0 ~ 9 | \d\d\d : 0 ~ 9 범위의 숫자가 3개를 의미 (123, 000 등) |
\w | 문자를 의미 | \w\w\w : 문자가 3개를 의미 (xyz, ABC 등) |
\s | 화이트 스페이스를 의미하는데, [\t\n\r\f] 와 동일 | \s\s : 화이트 스페이스 문자 2개 의미 (\r\n, \t\t 등) |
. | 뉴라인(\n) 을 제외한 모든 문자를 의미 | .{3} : 문자 3개 (F15, 0x0 등) |
regex101 : 여러가지 정규 표현식을 시험해 볼 수 있는 사이트이다. REGULAR EXPRESSION에 사용하려는 정규 표현식을 넣고, TEST STRING에 문자열을 넣어서 정규 표현식에 맞는 지 확인 할 수 있다. 각 패턴들의 의미도 설명해주기 때문에 쉽게 익힐 수 있다.
regexr : regex101과 비슷한 사이트
정규 표현식을 사용한 알고리즘 문제
'Language > Python' 카테고리의 다른 글
파이썬을 이용해서 순회 알고리즘을 구현해보자 ♻ (feat. DFS, BFS) (0) | 2019.02.08 |
---|---|
파이썬을 이용해서 이진 탐색 트리 구현하기 🎄 (2) | 2019.02.08 |
[Python] itertools를 이용한 조합 (2) | 2019.02.07 |
[Python] Dictionary(사전) 자료형 : { k : v }의 sort(정렬) (0) | 2019.02.05 |
댓글
이 글 공유하기
다른 글
-
파이썬을 이용해서 순회 알고리즘을 구현해보자 ♻ (feat. DFS, BFS)
파이썬을 이용해서 순회 알고리즘을 구현해보자 ♻ (feat. DFS, BFS)
2019.02.08 -
파이썬을 이용해서 이진 탐색 트리 구현하기 🎄
파이썬을 이용해서 이진 탐색 트리 구현하기 🎄
2019.02.08 -
[Python] itertools를 이용한 조합
[Python] itertools를 이용한 조합
2019.02.07 -
[Python] Dictionary(사전) 자료형 : { k : v }의 sort(정렬)
[Python] Dictionary(사전) 자료형 : { k : v }의 sort(정렬)
2019.02.05