본문 바로가기
Python

[Python] 정규 표현식(2)

by 찬'story 2021. 7. 8.

메타 문자(meta characters) : 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자

 

문자 클래스 []

문자 클래스로 만들어진 정규식은 '[] 사이의 문자들과 매치'라는 의미를 갖음

즉, 정규 표현식이 [abc]라면 이 표현식의 의미는 'a,b,c 중 한 개의 문자와 매치'를 뜻함

 

정규식이 [abc]일 때

-문자열이 "a"일 경우 정규식과 일치하는 문자인 "a"가 있으므로 매치

-문자열이 "before"일 경우 정규식과 일치하는 문자인 "b"가 있으므로 매치

-문자열이 "dude"일 경우 정규식과 일치하는 문자가 없으므로 매치되지 않음

 

[]안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위(From-To)를 의미.

ex) [a-c]라는 정규 표현식은 [abc]와 동일 / [0-5]는 [012345]와 동일

 

문자 클래스 안에는 어떤 문자나 메타 문자를 사용할 수 있으나, ^ 메타 문자를 사용할 경우 반대(not)의 의미를 갖는다. 예를 들어 [^0-9]라는 정규 표현식은 숫자가 아닌 문자만 매치된다.

 

정규표현식 설명
\d 숫자와 매치, [0-9]와 동일한 표현식이다.
\D 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
\s whitespace 문자(space나 tab처럼 공백을 표현하는 문자)와 매치, [\t\n\r\f\v]와 동일한 표현식. 맨 앞의 빈칸은 공백 문자(space)를 의미
\S whitespace문자가 아닌 것과 매치, [^\t\n\r\f\v]와 동일한 표현식.
\w 문자+숫자와 매치, [a-zA-Z0-9]와 동일한 표현식
\W 문자+숫자가 아닌 문자와 매치, [^a-zA-Z0-9]와 동일한 표현식

 

Dot(.)

정규 표현식의 Dot(.) 메타 문자는 줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미한다.

a.b

위 정규식의 의미는 "a + 모든 문자 + b"와 같다. 즉, a와 b라는 문자 사이에 어떤 문자가 들어가도 모두 매치된다.

정규식 문자열 매치 여부
a.b aab Yes
a0b Yes
abc No
("abc"는 "a"와 "b" 사이에 어떤 문자라도 하나는 있어야 하는 이 정규식과 일치하지 않으므로 매치되지 않음)

 

반복(*)

ca*t

이 정규식에는 반복을 의미하는 * 메타 문자가 사용되었다. 여기서 사용된 *는 * 바로 앞에 잇는 문자 a가 0부터 무한대로 반복될 수 있다는 의미이다.

정규식 문자열 매치 여부
ca*t ct Yes
cat Yes (1번 반복)
caaat Yes (3번 반복)

 

반복(+)

반복을 나타내는 또 다른 메타 문자로 +가 있다. +는 최소 1번 이상 반복될 때 사용한다. 즉 *가 반복 횟수 0부터라면 +는 반복 횟수 1부터이다.

ca+t

위 정규식은 "c + a(1번 이상 반복 + t"와 같고, 정규식에 대한 매치 여부는 다음과 같다.

정규식 문자열 매치 여부
ca+t ct No
cat Yes (1번 반복)
caaat Yes (3번 반복)

 

반복({m,n})

{} 메타 문자는 반복 횟수를 고정시킬 수 있다. {m,n} 정규식을 사용하면 반복 횟수를 m부터 b까지 매치할 수 있다. 또한 {m,}이면 반복 횟수가 m 이상인 경우이고, {,n}처럼 사용하면 반복 횟수가 n이하를 의미한다.

 

 

 

물론 정규 표현식은 이 외에도 정말 다양하다. 추후 가능하면 이러한 정규 표현식을 정리할 수 있는 날이 오기를 바란다.

 

다음 포스팅에서는 파이썬으로 이러한 정규 표현식을 어떻게 사용할 수 있는지 알아보자

 

 

 

 

 

 

 

 

 

 

 

'Python' 카테고리의 다른 글

Jupyter Notebook과 Git 연동  (0) 2022.07.01
[Python] 날짜 처리 방식  (0) 2021.07.17
[Python] 정규 표현식(3)  (0) 2021.07.08
[Python] 정규 표현식(1)  (2) 2021.06.29
백준 온라인 저지(Baekjoon Online Judge)  (0) 2021.06.26