정규 표현식(Regular Expression)

2023. 3. 16. 13:15Python/실전 예제로 배우는 파이썬 프로그래밍

정규 표현식이란 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어입니다.

자연어를 대상으로 원하는 단어만 추출하기 위해서 단어가 되기 위한 일정한 패턴이 존재하는데, 이러한 패턴을 표준화된 텍스트 형식으로 나타낸 것을 정규 표현식이라 하며, 이때 텍스트를 구성하는 하나의 문자를 메타문자라고 합니다.

 

메타문자

정규표현식에서 일정한 의미를 가지고 있는 특수문자를 메타문자(Meta characters)라고 합니다. 메타 문자는 대부분의 프로그래밍 언어에서 표준으로 사용됩니다.

 

주요 메타문자

메타문자 정규 표현식 의미
. .x 또는 x. 임의의 한 문자가 x앞이나 뒤에 오는 패턴 지정
^ ^x x로 시작하는 문자열(접두어 패턴 지정)
$ x$ x로 끝나는 문자열(접미어 패턴 지정)
* x* x가 0번 이상 반복
+ x+ x가 1번 이상 반복
? x? x가 0 또는 1개 존재
| abc|ABC abc 또는 ABC 두 개 중 하나 선택
[] [x] x문자 한 개 일치
[^] [^x] x문자 제외(부정)
{n} x{n} x가 n번 연속
{n,} x{n,} x가 n번 이상 연속
{m, n} x{m, n} x가 m~n 사이 연속

역슬래시(₩)로 시작하는 이스케이프 문자를 이용하여 정규표현식의 메타문자로 사용할 수 있습니다. 이스케이프 문자를 정규 표현식의 메타문자로 사용하기 위해서는 역슬래시(₩)를 하나 더 붙이거나 문자 앞부분에 'r'문자를 붙여서 이스케이프 문자로 해석하지 않도록 해야 합니다.

 

메타문자로 사용되는 이스케이프 문자

메타문자 의미
₩s 공백문자(white space)
₩b 문자와 공백 사이
₩d 숫자 [0-9]와 같다.
₩w 단어 [0-9a-zA-Z]와 같다. 영문자+숫자+_(밑줄)
₩n 줄바꿈 문자
₩t 탭 문자
※ 이스케이프 문자를 대문자로 적으면 반대 의미로 해석합니다. 예를 들면 '₩S'는 공백문자가 아닌 경우를 패턴으로 해석한다.

정규 표현식 모듈

파이썬에서는 메타문자를 이용하여 패턴(정규 표현식)을 만들고, 이러한 패턴을 특정 문자열을 적용하여 문자열을 처리할 수 있는 re 모듈을 제공합니다.

 

re 모듈의 주요 내장함수

함수(파라미터) 기능
compile(pattern, flag=0) 패턴을 컴파일하여 Pattern 객체 반환
escape(pattern) 문자열에서 특수 문자를 이스케이프 처리
findall(pattern, string, flags=0) string에서 패턴과 일치하는 모든 문자열을 리스트로 반환
findall(pattern, string, flags=0) string에서 패턴과 일치하는 모든 문자열을 반복자를 반환
fullmatch(pattern, string, flags=0) 패턴을 모든 string에 적용하여 Match 객체를 반환, 일치하는 것이 없으면 None 반환
match(pattern,string, flags=0) string의 처음부터 패턴을 적용하여 Match 객체를 반환, 일치하는 것이 없으면 None 반환
search(pattern, string, flags=0) 문자열을 스캔하여 패턴과 일치하는지 확인하고, 일치하는 객체 리턴
split(pattern, string, maxsplit=0, flags=0) string에서 대상으로 패턴과 일치하는 문자열을 분할하여 부분 문자열이 포함된 리스트 반환
sub(pattern, repl, string, count=0, flags=0)  string에서 패턴과 일치하는 문자열을 repl로 대체하여 문자열 반환
sub(pattern, repl, string, count=0, flags=0)  문자열에서 패턴과 일치하는 문자열을 repl로 대체하여 (new_string, 숫자)형식의 튜플 반환
template(pattern, flags=0) 템플릭 패턴을 컴파일하여 Pattern 객체 변환

 

'Python > 실전 예제로 배우는 파이썬 프로그래밍' 카테고리의 다른 글

문자열 처리  (0) 2023.03.17
객체지향프로그래밍 연습문제  (0) 2023.03.15
패키지와 모듈  (0) 2023.03.14
내장클래스  (0) 2023.03.13
객체지향 기법  (0) 2023.03.12