데이터 내에서 광범위하게 또는 세부적으로 일치하는 패턴을 찾아내는 특정 문자 시퀀스를 정규표현식이라고 한다.
즉, 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어를 말한다.
원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자를 말한다.
다음과 같은 문자들이 메타문자에 속한다.
. ^ $ * + ? { } [ ] \ | ( )
패턴 | 설명 |
---|---|
[a-zA-Z] | 알파벳 모두 |
[0-9] | 숫자 |
\d | 숫자, [0-9] 와 동일한 표현식 |
\D | 숫자가 아닌 것, [^0-9] 와 동일한 표현식 |
\s | whitespace 문자, [ \t\n\r\f\v] 와 동일한 표현식 |
\w | 문자+숫자(alphanumeric), [a-zA-Z0-9_] 와 동일한 표현식 |
\W | 문자+숫자(alphanumeric)가 아닌 문자, [^a-zA-Z0-9_] 와 동일한 표현식 |
줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미한다. 정규식을 작성할 때 re.DOTALL 옵션을 주면 \n 문자와도 매치된다.
a.b = a + 모든문자 + b
a.b는 a와 b라는 문자 사이에 어떤 문자가 들어가도 모두 매치된다는 말이다.
a[.]b = a + Dot(.)문자 + b
a[.]b는 "a.b" 문자열과 매치되고, "a0b" 문자열과는 매치되지 않는다 단, 문자 클래스([]) 내에 Dot(.) 메타 문자가 사용된다면 이것은 "모든 문자"라는 의미가 아닌 문자 . 그대로를 의미한다
ca*t = * 바로 앞에 있는 문자 a가 0부터 2억번 반복될 수 있다는 의미이다.
정규식 | 문자열 | Match 여부 | 설명 |
---|---|---|---|
ca*t | ct | Yes | "a"가 0번 반복되어 매치 |
ca*t | cat | Yes | "a"가 0번 이상 반복되어 매치 (1번 반복) |
ca*t | caaat | Yes | "a"가 0번 이상 반복되어 매치 (3번 반복) |
위에서 반복을 의미하는 *이 0부터 반복된다면 +는 1부터 반복된다.
ca+t = c + a(1번 이상 반복) + t
정규식 | 문자열 | Match 여부 | 설명 |
---|---|---|---|
ca+t | ct | No | "a"가 0번 반복되어 매치되지 않음 |
ca+t | cat | Yes | "a"가 1번 이상 반복되어 매치 (1번 반복) |
ca+t | caaat | Yes | "a"가 1번 이상 반복되어 매치 (3번 반복) |
{ } 메타 문자를 사용하여 반복 횟수를 고정할 수 있다 {m, n} 정규식을 사용하면 반복 횟수가 m부터 n까지 매치할 수 있다. 또한 m 또는 n을 생략할 수도 있다. {1,}은 +와 동일하고, {0,}은 *와 동일하다.
ca{2}t = c + a(반드시 2번 반복) + t
ca{2,5}t = c + a(2~5회 반복) + t
ab?c = a + b(있어도 되고 없어도 된다) + c
정규식 | 문자열 | Match 여부 | 설명 |
---|---|---|---|
ca{2}t | cat | No | "a"가 1번만 반복되어 매치되지 않음 |
ca{2}t | caat | Yes | "a"가 2번 반복되어 매치 |
ca{2,5}t | cat | No | "a"가 1번만 반복되어 매치되지 않음 |
ca{2,5}t | caat | Yes | "a"가 2번 반복되어 매치 |
ca{2,5}t | caaaaat | Yes | "a"가 5번 반복되어 매치 |
ab?c | abc | Yes | "b"가 1번 사용되어 매치 |
ab?c | ac | Yes | "b"가 0번 사용되어 매치 |
re.compile을 사용하여 정규 표현식(ab*)을 컴파일할 수 있다.
import re
p = re.compile('ab*')
다음과 같은 방법으로 상황에 따라 정규식을 이용하여 문자열을 검색할 수 있다.
Method | 목적 |
---|---|
match() | 문자열의 처음부터 정규식과 매치되는지 조사한다. |
search() | 문자열 전체를 검색하여 정규식과 매치되는지 조사한다. |
findall() | 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다. |
finditer() | 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려준다. |
RegExr은 정규식(RegEx/RegExp)을 학습, 구축 및 테스트하기 위한 온라인 도구로 JavaScript 및 PHP/PCRE 정규식을 지원한다.