이 포스팅은 Regular Expression 시리즈 12 편 중 6 번째 글 입니다.

  • Part 1 - 01: 개념잡기
  • Part 2 - 02: 간단한 메타문자
  • Part 3 - 03: re module
  • Part 4 - 04: match 객체의 메서드
  • Part 5 - 05: Compile Option(컴파일 옵션)
  • Part 6 - This Post
  • Part 7 - 07: 다양한 메타문자
  • Part 8 - 08: Grouping(그루핑)
  • Part 9 - 09: 전방 탐색(Lookahead Assertions)
  • Part 10 - 10: 문자열 바꾸기
  • Part 11 - 11: Greedy 와 Non-Greedy
  • Part 12 - 자주쓰이는 정규표현식 초급 정리 - 1
▼ 목록 보기

목차

▼ 내리기

앞에서 정규식을 표현할 때 우리는 \ 문자를 사용했다. 하지만 내가 정규식을 작성하는 데 있어서 \문자 자체를 찾고 싶다면 어떻게 해야할까?

\section

이렇게 정규식을 작성하게 되면 문제가 발생한다. \s 부분이 whitespace로 해석되어 의도한 대로 매치가 이루어지지 않는다.

[ \t\n\r\f\v]ection

즉, 위와 같은 의미로 해석된다. 이러한 문제에 대해서 해결하고 싶다면 아래와 같게 작성해야 한다.

\\section

파이썬의 문제

위의 과정까지는 아무런 문제가 없다. 하지만 파이썬에서 정규식을 저렇게 작성하면 문제가 발생한다.

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

파이썬 정규식 엔진에는 파이썬 문자열 리터럴 규칙에 따라 \\\로 변경되어 \section이 전달된다. 유닉스의 grep, vi 등에서는 이러한 문제가 없다. 파이썬에서 사용할 때만 발생한다(파이썬의 리터럴 규칙) 결국 정규식 엔진에 //문자를 전달하기 위해서는 \\\\ 이렇게 전달해야 한다.() 정규식 엔진은 정규식을 해석하고 수행하는 모듈이다.

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

정말 번거롭다. 이쁘지도 않고. 이렇게 이해하기 어려운 정규식에 대해서 사람들은 짜증을 표현했다. 이러한 문제로 인해 파이썬 정규식에는 Raw String 규칙이 생겨나게 되었다. 즉 컴파일해야 하는 정규식이 Raw String임을 알려 줄 수 있도록 파이썬 문법을 만든 것이다.

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

위와 같이 정규식 문자열 앞에 r 문자를 삽입하면 이 정규식은 Raw String 규칙에 의하여 백슬래시 2개 대신 1개만 써도 2개를 쓴 것과 동일한 의미를 갖게 된다. 결과적으로 백슬래시를 사용하여 검색을 진행하고자 할때는 raw 표현을 쓰는 것이 좋다.

Reference

07-2 정규 표현식 시작하기