본문 바로가기

파이썬으로 퀀트 프로그램 만들기 project

정규 표현식(정규식) 종류

728x90

정규 표현식(정규식)이란 프로그래밍에서 문자열을 다룰 때 문자열의 일정한 패턴을 표현하는 일종의 형식 언어입니다.

정규 표현식은 파이썬만의 고유 문법이 아니라 문자열을 처리하는 모든 프로그래밍에서 사용되는 공통 문법입니다.

 

정규 표현식을 배우기 위해서는 '메타 문자'의 의미를 알아야 합니다.

프로그래밍에서 메타 문자란 문자가 가진 원래의 의미가 아닌 특별한 용도로 사용되는 문자입니다.

 

대괄호[ ]는 문자 클래스로써 대괄호 안에 포함된 문자들 중 하나와 매치를 뜻합니다.

예시로 'apple', 'blueberry', 'coconut'과 정규표현식[ae]와의 매치 여부를 보겠습니다.

- 'apple' 에는 정규표현식 내의 a와 e가 모두 존재하므로 매치됩니다.

- 'blueberry'에는 e가 존재하므로 매치됩니다.

- 'coconut'에는 a와 e 둘 다 존재하지 않으므로 매치되지 않습니다.

 

만일 대괄호 [ ]안에 두 문자 사이에 하이픈(-)을 입력하면 두 문자 사이의 범위를 의미합니다.

즉, 두 문자 사이의 범위를 의미합니다.

예를 들어 [a-e]라는 정규표현식은 [abcde]와 동일하며, [0-5]는 [012345]와 동일합니다.

 

[a-z]는 알파벳 소문자

[A-Z]는 알파벳 대문자

[a-zA-Z]는 모든 알파벳

[0-9]는 모든 숫자를 뜻합니다.

 

[ ]안에 ^는 반대를 뜻합니다.

[^abc]는 a,b,c를 제외한 모든 문자와의 매치를 뜻합니다.

 

\d: 숫자와 매치, [0-9]와 동일한 표현식

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

\s: 공백 문자와 매치, [\t\n\r\f\v]와 동일

\S: 공백 문자가 아닌 것과 매치, [^\t\n\r\f\v]와 동일

\w: 문자 + 숫자와 매치, [a-zA-Z0-9]와 동일

대문자로 표현된 문자 클래스는 소문자로 표현된 것과 반대입니다.

 

Dot(.)는 줄바꿈 문자인 \n을 제외한 모든 문자와 매치되며, Dot 하나당 임의의 한 문자를 나타냅니다.

예를 들어, 정규 표현식 a.e는 'a+모든문자+e' 의 형태로써, a와 e 문자 사이에는 어떤 문자가 들어가도 모두 매치가 됩니다.

예를 들어, 'abe'는 정규식과 매치됩니다. 또한 'ace'도 매치됩니다.

그러나 'abce'는 a와 e사이에 여러개가 있으므로 매치되지 않습니다.

또한 'ae'도 a와 e사이에 문자가 없으므로 매치되지 않습니다.

 

메타문자 *의 경우 * 바로 앞에 있는 문자가 0부터 무한대로 반복될 수 있다는 의미입니다.

예를 들어,  ca*t라는 정규식은 c 다음의 a가 0부터 무한대로 반복되고 t로 끝난다는 의미입니다.

'ct, 'cat', 'caat', 'caaaat' 모두 정규식과 매치됩니다.

 

메타문자+의 경우는 최소 1번 이상 반복될 때 사용됩니다.

예를 들어, ca+t라는 정규식은 c다음의 a가 1번 이상 반복된 후 t로 끝남을 의미하며, 위 예제에서 'ct'는 a가 없으므로 매치되지 않습니다.

 

메타문자 { }를 사용하면 반복 횟수를 고정할 수 있습니다.

{m, n}은 반복 횟수가 m부터 n까지 고정됩니다.

m 혹은 n은 생략할 수 있으며, {3, }의 경우 반복 횟수가 3 이상, {, 3}의 경우 반복 횟수가 3 이하를 의미합니다. 

 

메타문자 ?는 {0, 1}과 동일하며 ? 앞의 문자가 있어도 되고 없어도 된다는 의미입니다.

 

|: or 과 동일한 의미

expr1 | expr2 는 둘 중 하나의 형태만 만족해도 매치됩니다.

 

^: 문자열의 맨 처음과 일치함을 의미

^a 정규식은 a로 시작하는 단어와 매치됩니다.

 

$: ^와 반대의 의미로써, 문자열의 끝과 매치함을 의미

a$는 a로 끝나는 단어와 매치됩니다.

 

\: 메타문자의 성질을 없앨때 붙입니다.

^나 $문자를 메타문자가 아닌 문자 그 자체로 매치하고 싶은 경우 \^, \$의 형태로 사용합니다.

 

( ): 괄호 안의 문자열을 하나로 묶어 취급합니다.

 

 

-정규 표현식과 관련된 메서드-

match(): 시작부분부터 일치하는 패턴을 찾음

search(): 첫 번째 일치하는 패턴을 찾음

findall(): 일치하는 모든 패턴을 찾음

finditer(): findall()과 동일하지만 반복 가능한 객체를 반환