본문 바로가기
Python

파이썬 - 정규표현식 (메타 문자/ 메서드)

by IT두잇 2022. 3. 16.

정규 표현식(Regular Expression)은 복잡한 문자열을 처리할 때 사용하는 기법입니다.

정규표현식은 💳 주민등록번호, ☎ 전화번호, 📧 이메일 등을 처리할 때 자주 사용됩니다.

 

정규 표현식 작성 전 꼭 기억해야할 메타 문자를 아래 정리해보았습니다.

문자 클래스

정규표현식 설명
\d 숫자와 매치, [0-9]와 동일한 표현식
\D 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식
\s 공백을 표현하는 문자와 매치, [\t, \n, \r, \f, \v]와 동일한 표현식
\S 공백이 아닌 것과 매치, [^\t, \n, \r, \f, \v]와 동일한 표현식
\w 문자 + 숫자(alphanumeric)와 매치, [a-zA-Z0-9]와 동일한 표현식
\W 문자 + 숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9]와 동일한 표현식

 

문자 클래스 이외의 메타 문자

정규표현식 예시 설명
. a.b a와 b 사이에 어떤 문자가 포함된다
. a[.]b a와 b 사이에 . 이 포함된다
* ab* * 바로 앞에 있는 b 문자가 0부터 무한대로 반복된다
+ ab+ + 바로 앞에 있는 b 문자가 최소 1회 이상 반복된다
? ab? ? 바로 앞에 있는 b 문자가 0번 혹은 1회 포함된다
{ m } a{3}b 바로 앞에 있는 a 문자가 m번 반복된다
{ m, n } a{2,7}b 바로 앞에 있는 a 문자가 최소 m번에서 최대 n번 반복된다
a{ , 7}b 바로 앞에 있는 a 문자가 n번 이하 반복된다
a{2, }b 바로 앞에 있는 a 문자가 최소 m번 이상 반복된다
^ ^ab 문자열의 맨 첫 문자가 a와 일치한다
$ ab$ 문자열의 맨 마지막 문자가 b와 일치한다

 


정규 표현식을 지원하기 위해 파이썬에서는 re모듈을 사용합니다. 사용 예시는 아래와 같습니다.

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

 

 

컴파일을 활용해 문자열 검색을 수행할 때는 아래 4가지 메서드를 활용합니다:

 

1) match: 문자열의 처음부터 정규식과 매치되는지 확인

import re
p = re.compile('[a-z]+')
m = p.match('python')
print(m)

결과값: <re.Match object; span=(0,6), match = ‘python’>

 

import re
p = re.compile('[a-z]+')
m = p.match('3 python')
print(m)

결과값: None

해석: 문자열의 처음이 매치되지 않아서 ‘None’ 출력

 

 

2) search: 문자열의 전체를 검색하여 정규식과 매치되는지 확인

import re
p = re.compile('[a-z]+')
m = p.search('python')
print(m)

결과값: <re.Match object; span=(0,6), match = ‘python’>

 

import re
p = re.compile('[a-z]+')
m = p.search('3 python')
print(m)

결과값: <re.Match object; span=(2,8), match = ‘python’>

 

 

3) findall: 정규식과 매치되는 모든 문자열을 리스트로 반환

import re
p = re.compile('[a-z]+')
print(p.findall('life is too short'))

결과값: ['life', 'is', 'too', 'short']

 

아래와 같이 re.매서드(’패턴’, ‘문자열’)로 작성할 수 있다.

import re
print(re.findall('ab*', 'dfjdiejakdabbbabei45'))

결과값: ['a', 'abbb', 'ab']

 

 

4) finditer: 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 반환

import re
result = re.finditer('[a-z]+', 'life is too short')
for r in result:
    print(r)

결과값:

<re.Match object; span=(0, 4), match='life'> <re.Match object; span=(5, 7), match='is'>

<re.Match object; span=(8, 11), match='too'> <re.Match object; span=(12, 17), match='short'>

 

 

 

 

참고

※ Raw String 규칙 ※

‘\string’ 문자열을 찾을 경우 \s로 혼돈될 수 있습니다.

따라서 오해를 방지하기 위해 r’문자열’로 작성하는 것이 좋습니다.