정규 표현식(regular expressions)은 복잡한 문자열을 처리할 때 사용하는 기법
문자열을 처리하는 모든 곳에서 사용하는 일종의 형식 언어로 이전 포스트에서
.(dot)문자까지 포스트하였다.
(https://velog.io/@kcs4752/Python-%EC%8B%AC%ED%99%94-%ED%95%99%EC%8A%B53)
이번 포스트에서는 '*' 문자부터 정리해보겠다.
'*' 바로 앞에 있는 문자 a가 0부터 무한대까지 반복될 수 있다는 의미
| 정규식 | 문자열 | 매치 여부 | 설명 |
|---|---|---|---|
| ca*t | ct | Yes | "a"가 0번 반복되어 매치 |
| ca*t | cat | Yes | "a"가 0번 이상 반복되어 매치 (1번 반복) |
| ca*t | caaat | Yes | "a"가 0번 이상 반복되어 매치 (3번 반복) |
'+'는 최소 1번 이상 반복될 때 사용
즉, '*'가 반복 횟수가 0부터라면 '+'는 반복 횟수가 1부터인 것
| 정규식 | 문자열 | 매치 여부 | 설명 |
|---|---|---|---|
| ca+t | ct | No | "a"가 0번 반복되어 매치되지 않음 |
| ca+t | cat | Yes | "a"가 1번 이상 반복되어 매치 (1번 반복) |
| ca+t | caaat | Yes | "a"가 1번 이상 반복되어 매치 (3번 반복) |
반복과 관련해 생각해보면,반복 횟수를 3회만 또는 1회부터 3회까지만으로 제한하고 싶을 것이다.
{} 메타 문자를 사용하면 반복 횟수를 고정할 수 있다.
{m, n} 정규식을 사용하면 반복 횟수가 m부터 n까지인 문자와 매치할 수 있다.
( {1,}은 +, {0,}은 *와 동일하다. )
ca{2}t
이 정규식의 의미는 다음과 같다.
"c + a를반드시 2번 반복 + t"
이 정규식에 대한 매치 여부는 다음 표와 같다.
| 정규식 | 문자열 | 매치 여부 | 설명 |
|---|---|---|---|
| ca{2}t | cat | No | "a"가 1번만 반복되어 매치되지 않음. |
| ca{2}t | caat | Yes | "a"가 2번 반복되어 매치 |
ca{2,5}t
이 정규식의 의미는 다음과 같다.
"c + a를2~5회반복 + t"
이 정규식에 대한 매치 여부는 다음 표와 같다.
| 정규식 | 문자열 | 매치 여부 | 설명 |
|---|---|---|---|
| ca{2,5}t | cat | No | "a"가 1번만 반복되어 매치되지 않음. |
| ca{2,5}t | caat | Yes | "a"가 2번 반복되어 매치 |
| ca{2,5}t | caaaaat | Yes | "a"가 5번 반복되어 매치 |
반복은 아니지만 이와 비슷한 기능을 하는 ? 문자가 있다.
? 메타 문자가 의미하는 것은 {0, 1}이다.
ab?c
이 정규식의 의미는 다음과 같다.
"a + b가있어도되고없어도됨 + c"
이 정규식에 대한 매치 여부는 다음 표와 같다.
| 정규식 | 문자열 | 매치 여부 | 설명 |
|---|---|---|---|
| ab?c | abc | Yes | "b"가 1번 사용되어 매치 |
| ab?c | ac | Yes | "b"가 0번 사용되어 매치 |
>>> import re
>>> p = re.compile('ab*')
re.compile을 사용하여 정규 표현식(위 예에서는 ab*)을 컴파일한다. re.compile의 리턴값을 객체 p(컴파일된 패턴 객체)에 할당해 그 이후의 작업을 수행할 것이다.
- 정규식을 컴파일할 때 특정 옵션을 주는 것도 가능한데, 이에 대해서는 뒤에서 자세히 살펴본다.
- 패턴이란 정규식을 컴파일한 결과이다.
| Method | 목적 |
|---|---|
| match() | 문자열의 처음부터 정규식과 매치되는지 조사한다. |
| search() | 문자열 전체를 검색하여 정규식과 매치되는지 조사한다. |
| findall() | 정규식과 매치되는 모든 문자열(substring)을 리스트로 리턴한다. |
| finditer() | 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 리턴한다. |
match, search는 정규식과 매치될 때는 match 객체를 리턴하고 매치되지 않을 때는 None을 리턴한다. match 객체란 정규식의 검색 결과로 반환된 객체를 말한다.
(더 자세한 내용은 아래의 링크를 통해 알 수 있다.)
https://wikidocs.net/4308