이 포스팅은 Regular Expression 시리즈 12 편 중 2 번째 글 입니다.
목차
원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자
문자 클래스 []
[ ] 사이에 있는 각각의 문자들에 대해 적어도 하나가 매치가 되는가?
즉, 정규 표현식이 [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번 사용되어 매치 |