정규 표현식(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’문자열’로 작성하는 것이 좋습니다.
'Python' 카테고리의 다른 글
[파이썬] 데이터 전처리 진행하기 (0) | 2022.05.17 |
---|---|
파이썬 - 피보나치 함수 / 프로젝트 오일러 2번 문제 (0) | 2022.03.17 |
파이썬 - random 함수 (0) | 2022.03.16 |
파이썬 - try, except문 (0) | 2022.03.16 |
파이썬 - 내장 함수 (enumerate/ filter / map/ zip) (0) | 2022.03.02 |