이 포스팅은 Regular Expression 시리즈 12 편 중 2 번째 글 입니다.

  • Part 1 - 01: 개념잡기
  • Part 2 - This Post
  • Part 3 - 03: re module
  • Part 4 - 04: match 객체의 메서드
  • Part 5 - 05: Compile Option(컴파일 옵션)
  • Part 6 - 06: 파이썬 백슬래시 문제
  • Part 7 - 07: 다양한 메타문자
  • Part 8 - 08: Grouping(그루핑)
  • Part 9 - 09: 전방 탐색(Lookahead Assertions)
  • Part 10 - 10: 문자열 바꾸기
  • Part 11 - 11: Greedy 와 Non-Greedy
  • Part 12 - 자주쓰이는 정규표현식 초급 정리 - 1
▼ 목록 보기

원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자

문자 클래스 []

[ ] 사이에 있는 각각의 문자들에 대해 적어도 하나가 매치가 되는가?

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

  • “a”는 정규식과 일치하는 문자인 “a”가 있으므로 매치
  • “before”는 정규식과 일치하는 문자인 “b”가 있으므로 매치
  • “dude”는 정규식과 일치하는 문자인 a, b, c 중 어느 하나도 포함하고 있지 않으므로 매치되지 않음

[ ] 안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위(From - To)를 의미한다. 예를 들어 [a-c]라는 정규 표현식은 [abc]와 동일하고 [0-5][012345]와 동일하다.

  • [a-zA-Z] : 알파벳 모두
  • [0-9] : 숫자

문자 클래스([ ]) 안에는 어떤 문자나 메타 문자도 사용할 수 있다. 하지만..

주의사항

주의해야 할 메타 문자가 1가지 있다. 그것은 바로 ^인데, 문자 클래스 안에 ^ 메타 문자를 사용할 경우에는 반대(not)라는 의미를 갖는다. 예를 들어 [^0-9]라는 정규 표현식은 숫자가 아닌 문자만 매치된다.

자주 사용하는 문자 클래스

메타문자 동일 표현식 설명
\d [0-9] 숫자와 매치
\D [^0-9] 숫자가 아닌 것과 매치
\s [ \t\n\r\f\v] whitespace 문자(스페이스, 공백, tab)와 매치(맨 앞의 빈 칸은 공백문자(space)를 의미한다.)
\S [^ \t\n\r\f\v] whitespace 문자가 아닌 것과 매치
\w [a-zA-Z0-9_] 문자+숫자(alphanumeric)와 매치
\W [^a-za-z0-9_] 문자+숫자(alphanumeric)가 아닌 문자와 매치

대문자 사용은 소문자의 반대이다.

Dot(.)

줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미, 단 하나라도 있어야 한다.

사실, re.DOTALL 옵션을 주면 \n 문자와도 매치된다. 일단 예제를 보며 이해해보자.

정규식 의미
a.b “a + 모든문자 + b”

즉, a와 b라는 문자 사이에 어떤 문자가 들어가도 모두 매치된다는 의미이다. 문자열 “aab”, “a0b”, “abc”가 정규식 a.b와 어떻게 매치되는지 살펴보자.

  • “aab”는 가운데 문자 “a”가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
  • “a0b”는 가운데 문자 “0”가 모든 문자를 의미하는 .과 일치하므로 정규식과 매치된다.
  • “abc”는 “a”문자와 “b”문자 사이에 어떤 문자라도 하나는 있어야 하는 이 정규식과 일치하지 않으므로 매치되지 않는다.

마지막이 헷갈린다. 조심하도록 하자. 그런데 만약 “.” 문자 자체와 매칭이 되길 원한다면 어떻게 해야할까?

정규식 의미
a[.]b “a + Dot(.)문자 + b”

정규식 a[.]b는 “a.b” 문자열과 매치되고, “a0b” 문자열과는 매치되지 않는다. 혼동하지 말자.

반복(*)

특정 문자가 0부터 무한대까지의 반복을 매칭한다.

정규식 문자열 Match 여부 설명
ca*t ct Yes “a”가 0번 반복되어 매치
ca*t cat Yes “a”가 0번 이상 반복되어 매치 (1번 반복)
ca*t caaat Yes “a”가 0번 이상 반복되어 매치 (3번 반복)

반복(+)

특정 문자가 1부터 무한대까지의 반복을 매칭한다.

정규식 문자열 Match 여부 설명
ca+t ct No “a”가 0번 반복되어 매치되지 않음
ca+t cat Yes “a”가 0번 이상 반복되어 매치 (1번 반복)
ca+t caaat Yes “a”가 0번 이상 반복되어 매치 (3번 반복)

반복({n,m})

특정 문자가 n이상 m이하 반복 횟수인 경우 매칭한다.

{ } 메타 문자를 사용하면 반복 횟수를 고정할 수 있다. {m, n} 정규식을 사용하면 반복 횟수가 m부터 n까지 매치할 수 있다. 또한 m 또는 n을 생략할 수도 있다. 만약 {3,}처럼 사용하면 반복 횟수가 3 이상인 경우이고 {,3}처럼 사용하면 반복 횟수가 3 이하를 의미한다. 생략된 m은 0과 동일하며, 생략된 n은 무한대(2억 개 미만)의 의미를 갖는다.

{1,}은 +와 동일하고, {0,}은 *와 동일하다. 이 부분을 언급하는 이유는, 굳이 저런 표현보다는 +, *을 사용하는 것이 직관적이기 때문이다.

{n}

반드시 n번 반복.

정규식 문자열 Match 여부 설명
ca{2}t cat No “a”가 1번만 반복되어 매치되지 않음
ca{2}t caat Yes “a”가 2번 반복되어 매치

{n, m}

n~m 번 반복.

정규식 문자열 Match 여부 설명
ca{2,5}t cat No “a”가 1번만 반복되어 매치되지 않음
ca{2,5}t caat Yes “a”가 2번 반복되어 매치
ca{2,5}t caaaaat Yes “a”가 5번 반복되어 매치

?

있어도 되고 없어도 된다.

정규식 문자열 Match 여부 설명
ab?c abc Yes “b”가 1번 사용되어 매치
ab?c ac Yes “b”가 0번 사용되어 매치

Reference

07-2 정규 표현식 시작하기