IT흔적

[파이썬] 정규표현식의 기초[1] - 메타 문자 본문

DO it! Python

[파이썬] 정규표현식의 기초[1] - 메타 문자

흔적남기는 개발자 2019. 1. 22. 19:08

정규 표현식의 기초, 메타 문자(meta characters)


메타 문자란 원래 그문자가 가진 뜻이 아닌 특별한 용도로 사용되는 문자를 말한다.  ex)메타문자: . ^ $ * + ? { } [ ] \ | ( ) 


1.문자 클래스(character class) : [] ex) 정규 표현식 [파이썬]이면 '파, 이 , 썬 중 한개의 문자와 매치  



정규식 

문자열

매치여부

 설명

[파이썬]

파파

 Y

 '파'가 있음

이이

 Y

 '이'가 있음

선선

 N

 '선'은 없음


[0-5] (-) 기호는 [012345] FROM ~ TO 를 나타낸다. 

그리고 주의할점은 ^ 메타 문자가 사용될 경우 반대 의미를 갖고 있다 [^0-9] 숫자가 아니라 문자가 배치된다.   


☆ [자주 사용하는 문자 클래스]


[0-9] 또는 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이다. 이렇게 자주 사용하는 정규식들은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자.

\d - 숫자와 매치, [0-9]와 동일한 표현식이다.
\D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.

\s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
\S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.

\w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식이다.
\W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식이다.

대문자로 사용된 것은 소문자의 반대임을 추측할 수 있을 것이다. 


2.Dot(.) : 메타 문자는 줄바꿈 문자인 \n를 제외한 모든 문자와 매치됨을 의미 !But! re.DOTALL이라는 옵션을 주면 \n 문자와도 배치 가능


ex) a.b # a와 b사이에 줄바꿈 문자를 제외한 어떤 문자가 들어가도 모두 매치 -> a + 모든 문자 + b 


 정규식

문자열 

매치여부 

설명 

 a.b

 aab

 Y

 첫번째 a  끝 b 사이에 문자가 왔기 때문에 가능

 a0b

 Y

 첫번째 a  끝 b 사이에 문자가 왔기 때문에 가능

 abc

 N

 첫번째 a가 왔으나 마지막에 b가 아니라 c가 와서 불가능


그리고 여기서 주의할점은 만약에 Dot(.) 문자 클래스[] 가 같이 사용이 되면 모든 문자열이 아니라 그냥 문자하고만 매치가 가능!!

ex) a[.]b -> aab 가능 , a0b 불가능


3.반복(*) : 무한대라고 생각하면 된다. 


ex) ca*t  # * 앞에 있는 a가 0번부터 무한까지 몇번나와도 상관없다 나오기만하면 매치가 된다.


정규식

문자열 

매치여부 

설명 

 ca*t

ct 

'a'가 0번 반복되어 가능 

caat

'a'가 2번 사용되어 가능 

caaaaaaaaaaaaaaaaaaaaaaaat 

'a'가 무수히 많이 사용되었으나 가능 


3-(2)반복(+) : 반복을 나타내는 또 다른 메타 문자로 +가 있다. +는 *와 달리 최소 1번부터 시작해야 매치가 가능하다.


ex) ca+t # +앞에있는 a가 최소 1번부터 무한대 까지 나오면 매치 가능 


 정규식

문자열 

매치여부 

설명 

 ca+t

 ct

N

 'a'가 0번이여서 불가능

 caat

'a'가 2개여서 가능 

 caaaaaaaaaaaaaaaaaat

Y

'a'가 무수히 많이 사용되었으나 가능 


3-(3)반복({m,n},?) : 무한번이아니라 5번까지만 쓸 수 있게하고 싶을때 사용한다. (0-5, 1-4) 

{ } - 반복횟수 고정, {m, n} m부터 n까지 매치 가능 또는 m 또는 n을 생략 할 수 있다.


ex) 

1. {m} ca{2}t  # a가 2번 반복되면 매치 -> 2번만 가능

 정규식

문자열 

매치여부 

설명 

ca{2}t 

cat 

N

"a"가 1번 사용되어서 불가능 

ca{2}t

caat 

"a가 2번 사용되어서 가능


2. {m, n} cat{2,5}t  # a가 2~5번 반복되면 매치  -> 2,3,4,5 가능

정규식

문자열 

매치여부 

설명 

ca{2,5}t 

cat 

 N

"a"가 1번만 반복되어 매치 x

ca{2,5}t 

caat

 Y

"a"가 2번 사용되어 매치 o

ca{2,5}t

caaaaat

 Y

"a가 5번 반복되어 매치 o


3. ? ca?t  # '?' 앞에 있는 a가 0~1번 사용되면 매치 -> 0번 또는 1번 사용되면 가능

정규식

문자열 

매치여부 

설명 

 ca?t

 ct

Y

"a"가 없어도 0번 이여서 가능

 cat

"a"가 1번 사용되어서 매치o