TigerCow.Door


안녕하세요. 문범우입니다.

이번 포스팅에서는 정규표현식에서 사용되는 메타문자에 대한 총정리를 해보려 합니다.

지난 포스팅에서 기본적인 메타문자들을 정리해보았는데, 그 내용들을 포함해서 함께 정리해보도록 하겠습니다.

정규표현식에 대해 조금 더 궁금하신 분들은 아래의 포스트를 참고해주시길 바랍니다 :)


정규표현식이란? (1)


정규표현식이란? (2)



1. 백슬래시(\)


우리가 메타문자에 대해 총 정리를 하기 앞서서, 정규표현식을 사용할 때 혼란이 될 수도 있는 백슬래시(\)에 대해서 잠깐 이야기해보겠습니다.

먼저 백슬래시는 보통 자판의 엔터위에 있는 버튼을 통해 입력할 수 있습니다.


우리가 정규표현식을 이용하여 TEST라는 파일에서 "\section" 이라는, 백슬래시를 포함한 문자열을 찾으려고 한다고 생각해봅시다.

그럼 다음과 같은 정규식을 만들수 있습니다.


p = re.compile("\section")

 

하지만 위의 정규식은 백슬래시를 이용한 \s 문자가 whitespace로 해석되어 우리가 원하는 문자열을 찾지 못하게 됩니다.

그럼 어떻게 해야 할까요? 바로, 이스케이프 처리를 함으로써 백슬래시가 문자열 자체로 인식되게끔 해야 합니다.

바로 백슬래시 하나를 더 이용하는 건데요, 아래와 같이 코드를 구현하면 됩니다.


p = re.compile("\\section")


즉 위와 같이 코드를 구현하면, 파이썬 정규식 엔진에서는 파이썬의 특정 규칙에 의하여 \\ 를 \ 로 해석하게 됩니다.


* 이러한 문제는 정규식을 파이썬에서만 사용할 때 생기는 문제입니다.


그런데 만약 우리가 백슬래시 두개가 연속으로 포함된 문자열을 탐색하려면 어떻게 할까요? 위와 같은 방법으로 생각해본다면 다음과 같이 코드를 구현할 수 있을 것입니다.


p = re.compile("\\\\section")


하지만 너무 복잡하지 않나요?

이러한 문제 때문에 파이썬에서는 Raw String 이라는 것이 생겨나게 되었습니다.

이는 아래와 같이 사용할 수 있습니다.


p = re.compile(r'\\section')


이와 같이 파이썬에서는 정규식 문자열 앞에 r 을 붙여줌으로써 백슬래시 1개를 두개로 인식하게끔 할 수 있습니다.



2. 메타문자 총 정리


- []


먼저 알아볼 것은 문자 클래스 [] 입니다.

문자 클래스로 만들어지는 정규식은, [와 ]로 둘러쌓인 내부의 문자열과 매치되는 것이라는 의미를 가집니다.




또한 자주 사용되는 문자클래스는 아래와 같이 별도의 표기법으로 사용될 수 있습니다.



문자클래스 내부에서 쓰이는 ^ 는 뒤에서 알아볼 메타문자와는 다른의미인, not의 의미를 가지고 있습니다.





- . (Dot)


.(Dot) 은 줄바꿈 문자인 \n을 제외한 모든 하나의 문자와 매치되는 것을 의미합니다.





- *


*는 반복을 나타내는 메타문자로써, 해당 메타문자 앞의 글자가 0번이상 반복되는 모든 문자열과 매치됩니다.




- +


+는 *과 같은 반복을 나타내는 메타문자입니다. *는 다르게 앞의 글자가 0번을 제외한, 1번이상 반복되는 모든 문자열과 매치됩니다.


 


- {m,n}


{m,n}또한 반복을 나타내는 메타문자입니다. 위와는 다르게 반복횟수를 m과 n으로 정할 수 있습니다. 즉, 앞의 문자가 m번 이상 n번이하 반복되는 모든 문자열과 매치 됩니다.




- ?


? 는 앞의 문자가 0~1번 반복되는 모든 문자열과 매치됩니다.




- |


| 는 보통 키보드의 엔터키위에 있는 키입니다. 백슬래시로도 사용되는 키인데 shift와 함께 눌러주면 됩니다.

해당 | 메타문자는 a|b 와 같은 형식으로 사용되며 a 또는 b와 매치되는 문자열을 반환합니다.




- ^


^는 문자열의 맨처음을 의미하는 메타문자입니다. 문자클래서 내부에서 not의 의미로 사용되기도 하므로 혼동되지 않도록 주의하세요. 정규식으로 찾고자 하는 문자열의 앞에 입력합니다.





- $


$는 ^와 반대로 문자열의 맨 마지막을 의미하는 메타문자 입니다. ^와는 다르게 매치할 문자열의 뒤에 입력합니다.





- \A


\A는 기본적으로 ^와 같이 문자열의 맨 처음을 의미하는 메타문자입니다. 하지만 다른점이 있다면 우리가 re.MULTILINE이라는 컴파일 옵션을 사용했을때 ^는 라인별 문자열의 맨처음을 의미하지만 \A는 라인별이 아닌 문자열 전체에서의 맨 처음을 의미합니다.



- \Z


\Z는 기본적으로 $와 같이 문자열의 맨 뒤를 의미하는 메타문자입니다. 하지만 다른점은 \A와 같이, re.MULTILINE이라는 컴파일 옵션을 사용했을때 $는 라인별 문자열의 맨뒤를 의미하지만 \Z는 라인별이 아닌 문자열 전체에서의 맨 뒤를 의미합니다.



- \b


\b는 단어구분자로 사용됩니다. 즉, 해당 메타문자는 단순히 단어로 찾고자할 때 사용되는 메타문자입니다.




- \B


\B는 \b와 반대로 단어가 아닌 문자열을 찾는데 사용되는 메타문자입니다.





이렇게하여 많이 사용되는 메타문자들을 정리해보았습니다.

추후 메타문자에 대해서 추가적인 내용이나, 더 필요한 내용이 있다면 속해서 수정하도록 하겠습니다.

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요