Python 심화 학습4

CheolSoonKang·2024년 2월 26일

개념정리

목록 보기
14/18

정규표현식

정규 표현식(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,}은 *와 동일하다. )

  1. {m}

ca{2}t

이 정규식의 의미는 다음과 같다.

"c + a를반드시 2번 반복 + t"

이 정규식에 대한 매치 여부는 다음 표와 같다.

정규식 문자열 매치 여부 설명
ca{2}t cat No "a"가 1번만 반복되어 매치되지 않음.
ca{2}t caat Yes "a"가 2번 반복되어 매치
  1. {m, n}

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번 반복되어 매치

3. ? 문자

반복은 아니지만 이와 비슷한 기능을 하는 ? 문자가 있다.
? 메타 문자가 의미하는 것은 {0, 1}이다.

ab?c

이 정규식의 의미는 다음과 같다.

"a + b가있어도되고없어도됨 + c"

이 정규식에 대한 매치 여부는 다음 표와 같다.

정규식 문자열 매치 여부 설명
ab?c abc Yes "b"가 1번 사용되어 매치
ab?c ac Yes "b"가 0번 사용되어 매치
즉, b 문자가 있거나 없거나 둘 다 매치되는 경우이다.

파이썬에서 정규 표현식을 지원하는 re 모듈

>>> import re
>>> p = re.compile('ab*')

re.compile을 사용하여 정규 표현식(위 예에서는 ab*)을 컴파일한다. re.compile의 리턴값을 객체 p(컴파일된 패턴 객체)에 할당해 그 이후의 작업을 수행할 것이다.

  • 정규식을 컴파일할 때 특정 옵션을 주는 것도 가능한데, 이에 대해서는 뒤에서 자세히 살펴본다.
  • 패턴이란 정규식을 컴파일한 결과이다.

정규식을 이용한 문자열 검색


이제 컴파일된 패턴 객체를 사용하여 문자열 검색을 수행해 보자. 컴파일된 패턴 객체는 다음과 같은 4가지 메서드를 제공한다.
Method 목적
match() 문자열의 처음부터 정규식과 매치되는지 조사한다.
search() 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.
findall() 정규식과 매치되는 모든 문자열(substring)을 리스트로 리턴한다.
finditer() 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 리턴한다.

match, search는 정규식과 매치될 때는 match 객체를 리턴하고 매치되지 않을 때는 None을 리턴한다. match 객체란 정규식의 검색 결과로 반환된 객체를 말한다.

(더 자세한 내용은 아래의 링크를 통해 알 수 있다.)
https://wikidocs.net/4308

profile
소통하며 성장하는 늦깎이 개발자

0개의 댓글