본문 바로가기

dev/python

[python] Regular Expression - Meta characters

메타 문자란?

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

 

따라서 아래 문자들을 정규 표현식에 사용하면 메타문자로써 특별한 의미를 갖게 된다

. ^ $ * + ? { } [ ] \ | ( )

[  ] (문자 클래스)

 

뜻은 [   ] 사이의 문자들과 매치

 

들어가는 값은 어떤 문자든 상관없다

[abc] --> a, b, c 중 1개의 문자
[a-z] --> a~z 
[A-Z] --> A~Z
[a-zA-Z] --> 모든 알파벳
[0-9] --> 모든 숫자

위의 예시처럼 하이픈을 사용해서 두 문자 사이의 범위를 나타내기도 한다

문자 클래스 안에는 어떤 문자나 메타문자도 사용할 수 있다 (^는 제외 이유는 후술)

 

알파벳 전체나 숫자 전체같은 것들은 자주 사용하기 때문에 별도의 표기법으로 사용가능하다

\d = [0-9]
\D = [^0-9]

\s = [ \t\n\r\f\v]
\S = [^ \t\n\r\f\v]

\w = [a-zA-Z0-9_]
\W = [^a-zA-Z0-9_]

척 봐도 \대문자는 \소문자와 반대인 것을 알 수 있다


. (Dot)

 

닷은 \n을 제외한 모든 문자와 매치된다

물론 특정한 옵션을 주면 \n 문자와도 매치가 된다(어떤 옵션인지는 후술)

a.b   >>> a + 모든 문자 + b
a[.]b >>> a.b  #여기서의 dot은 문자열 .으로 인식된다

* (반복)

에스터리스크는 에스터리스크 바로 앞의 문자의 반복을 의미한다

반복횟수는 0부터 무한대다

(사실 무한대가 아니라 메모리 문제로 2억개 정도가 한계라고 한다)

ab*c 와 매치되는 문자열
>>> ac # b가 0개
>>> abc # b가 1개
>>> abbbbbbbbbbbbbbbbbbbbbbbbbc

+ (반복)

 

아니 의사양반 반복이 2개라니..

걱정마시라 차이가 있으니

에스터리스크와 플러스가 다른 점은

플러스는 반복되지 않은 것은 매치시키지 않는다는 것이다

ab+c 와 매치되는 문자열
>>> abc 
>>> abbbbbbbbbbbbbbbbbbbbbbbbbc

위 예시로 알 수 있듯 플러스는 문자열이 1번 이상 반복 되어야 한다


 

앞의 문자열이 없어도 매치시키고 1개 있어도 매치시킨다

단, 2번 이상 반복된다면 매치시키지 않는다

ab?c
>> ac, abc 만 매치
>> a, c, abbc, 는 매치 안 됨

 


{  } (반복)

 

아니 의사양반 반복이 또 있어?

물론 차이가 또 있다 중괄호 내의 내용에 따라 특정 횟수 이상, 이하, 또는 사이의 반복만을 매치시킨다

예시로 차이를 알아보자

ab{2}c  #b가 2개일 때만 매치
>> abbc 와는 매치
>> ac abc abbbc 와는 매치 안 됨


ab{2,}c  #b가 2개 이상일 때만 매치
>> ac, abc 와는 매치 안 됨
>> abbc, abbbbbbc 와는 매치


ab{,3}c  #b가 3개 이하일 때만 매치
>> ac, abbc, abbbc 매치 됨
>> abbbbc, abbbbbbbbbbc 와는 매치 안 됨


ab{2,6}c  #b가 2개이상 6개 이하일 때만 매치
>> ac, abc, abbbbbbb 매치 안 됨
>> abbc, abbbbc, abbbbbbc 매치

 

중괄호 특성 상 앞에 나온 *, +, ? 을 모두 표현할 수 있다

ab*c = ab{0,}c
ab+c = ab{1,}c
ab?c = ab{0,1}c