본문 바로가기

언어/Python

[ Python ] 정규 표현식에 플래그 (flag) 사용하기

반응형

정규 표현식에서 flag는 특정한 모드를 설정하여 패턴 매칭의 동작을 변경하거나 확장하는 데 사용됩니다. Python의 re 모듈에서 flag는 여러 가지 옵션을 제공하며, 주로 다음과 같은 flag가 사용됩니다:

  1. re.IGNORECASE (re.I): 대소문자를 구분하지 않고 매칭합니다. 예를 들어, re.search('a', 'Apple', re.IGNORECASE)는 매칭됩니다.
  2. re.MULTILINE (re.M): 여러 줄 모드로, 문자열의 여러 줄을 각각 개별적으로 취급합니다. 이 모드에서는 ^$가 각각 줄의 시작과 끝을 나타냅니다.
  3. re.DOTALL (re.S): 점(.)이 개행 문자를 포함하여 모든 문자와 매칭되도록 합니다. 기본적으로 점(.)은 개행 문자를 제외한 모든 문자와 매칭됩니다.
  4. re.VERBOSE (re.X): 정규 표현식을 이해하기 쉽게 여러 줄로 작성하고, 주석을 포함할 수 있게 합니다. 패턴 내에서 공백과 주석을 무시합니다. 이를 통해 더 읽기 쉬운 정규 표현식을 작성할 수 있습니다.
  5. re.ASCII (re.A): 유니코드 문자열에서도 \w, \W, \b, \B, \d, \D, \s, \S 등의 매칭을 ASCII 문자로 제한합니다.
  6. re.LOCALE (re.L): 로케일 설정에 따라 \w, \W, \b, \B 등의 매칭을 변경합니다. 이 옵션은 잘 사용되지 않으며, 대신 re.ASCII나 유니코드 모드를 사용하는 것이 권장됩니다.

각 flag는 개별적으로 또는 여러 개를 결합하여 사용할 수 있습니다. 예를 들어, 대소문자를 구분하지 않으면서 여러 줄 모드로 매칭하려면 re.IGNORECASE | re.MULTILINE과 같이 사용할 수 있습니다.

예제 코드

다음은 여러 flag를 사용하는 예제입니다:

import re

pattern = r'^hello'
text = '''Hello world
hello Python'''

# 대소문자 구분 없이, 여러 줄 모드로 매칭
matches = re.findall(pattern, text, re.IGNORECASE | re.MULTILINE)
print(matches)

이 예제에서 re.IGNORECASE | re.MULTILINE flag를 사용하여 Hello worldhello Python 두 줄 모두에서 매칭된 결과를 반환합니다.

이러한 flag를 사용하면 정규 표현식을 더 유연하고 강력하게 사용할 수 있습니다.

반응형