Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Perl과 Python 정규 표현식 비교하기: 공통점과 차이점 완벽 정리

정규 표현식(regex)은 대부분의 프로그래밍 언어에서 기본 문법이 거의 동일하게 구현되어 있습니다. Perl과 Python 역시 예외가 아니며, 핵심 기능은 서로 매우 유사합니다. 이 글에서는 두 언어의 정규 표현식을 비교하며 공통점과 차이점을 살펴보겠습니다.

1. 기본 문법 요소

거의 모든 정규 표현식 구현체에서 공통으로 지원되는 가장 기본적인 기능은 다음과 같습니다.

  • 임의 문자: . (줄바꿈 문자를 제외한 임의의 한 문자)
  • 수량자(quantifier): *, +, ?
  • 앵커(anchor): ^ (문자열 시작), $ (문자열 끝)
  • 문자 클래스: 대괄호 [] 안에 표기
  • 역참조(back reference): \1, \2, \3

Perl과 Python 모두 위의 기본 요소를 동일한 방식으로 지원하므로, 간단한 패턴이라면 두 언어 간에 코드를 거의 그대로 옮겨 사용할 수 있습니다.

2. 선택(alternation) 표기법

여러 패턴 중 하나를 선택하는 선택(alternation)은 Perl과 Python 모두 파이프 기호 |로 표기합니다. 예를 들어 cat|dog는 "cat" 또는 "dog"와 일치합니다.

3. 인라인 수정자와 주석

두 언어 모두 (?aimsx) 형태의 인라인 수정자를 통해 정규 표현식의 동작 방식을 변경할 수 있습니다.

  • (?i): 대소문자를 구분하지 않고 일치시킵니다.
  • (?m): 다중 행 모드를 활성화합니다.
  • (?s): 점(.)이 줄바꿈 문자까지 포함하도록 합니다.
  • (?x): 공백과 주석을 무시하는 확장 모드를 활성화합니다.

이러한 수정자들은 두 언어에서 의미가 동일합니다. 또한 (?# ... ) 형태로 정규 표현식 내부에 직접 주석을 작성할 수 있는 것도 두 언어가 같습니다.

4. 룩어라운드(Look-around)

Perl과 Python은 전후방 탐색, 즉 룩어라운드(look-around)를 동일한 문법으로 지원합니다.

  • (?=...): 긍정형 전방 탐색(positive lookahead)
  • (?!...): 부정형 전방 탐색(negative lookahead)
  • (?<=...): 긍정형 후방 탐색(positive lookbehind)
  • (?<!...): 부정형 후방 탐색(negative lookbehind)

룩어라운드는 실제로 일치시키지 않고 특정 조건만 확인하는 기능으로, 복잡한 패턴 검증에 유용하게 활용됩니다.

5. 앵커와 축약 문자 클래스

두 언어 모두 문자열의 시작과 끝을 나타내는 앵커 \A\Z를 지원하며, 자주 쓰이는 축약 문자 클래스도 동일하게 제공합니다.

  • \d / \D: 숫자 / 숫자가 아닌 문자
  • \s / \S: 공백 문자 / 공백이 아닌 문자

6. 명명된 캡처 그룹(Named Capture Group)

두 언어 모두 캡처 그룹에 이름을 붙일 수 있습니다. Python 스타일 문법인 (?P<name>)로 이름을 정의하고, (?P=name)으로 해당 그룹을 참조할 수 있으며, Perl도 이 문법을 지원합니다.

다만 Perl은 여기에 더해 자체적인 고유 문법도 함께 제공한다는 점이 차이입니다. Perl에서는 (?<name>...)으로 이름을 정의하고 \k<name> 또는 \k'name'으로 참조할 수 있습니다.

마무리

정리하면, Perl과 Python의 정규 표현식은 기본 문법, 선택 연산, 인라인 수정자, 룩어라운드, 앵커, 축약 문자 클래스 등 대부분의 영역에서 호환됩니다. 따라서 한 언어에서 익힌 정규 표현식 지식을 다른 언어로 손쉽게 옮길 수 있으며, 명명된 캡처 그룹처럼 Perl이 추가 문법을 제공하는 부분만 주의하면 됩니다.