[파이썬] 문자열의 정규식 매칭 옵션

정규식(regular expression)은 특정한 패턴을 가진 문자열을 매칭하기 위해 사용되는 강력한 도구입니다. 파이썬에서는 re 모듈을 사용하여 정규식 패턴을 검색하고 매칭할 수 있습니다.

정규식을 사용할 때, 매칭 옵션을 지정하여 검색 결과를 조정할 수 있습니다. 이러한 매칭 옵션은 다양한 상황에서 유연한 정규식 패턴 매칭을 제공하며, 이 글에서는 몇 가지 주요한 매칭 옵션에 대해 알아보겠습니다.

1. re.IGNORECASE (re.I)

이 옵션은 대소문자 구분 없이 매칭을 수행합니다. 즉, 대소문자를 구분하지 않고 패턴을 검색하고 매칭할 수 있습니다. 예를 들어, 패턴이 “apple”이고 대소문자 구분이 없이 옵션을 사용한다면 “Apple”, “ApPlE”, “aPpLe”와 같은 단어도 매칭됩니다.

import re

pattern = "apple"
text = "I have an Apple"
match = re.search(pattern, text, re.IGNORECASE)
print(match.group())  # 출력: "Apple"

2. re.MULTILINE (re.M)

이 옵션은 문자열의 여러 줄에 걸쳐 패턴을 매칭합니다. 즉, 문자열 내에서 각 줄의 시작 부분에 패턴이 매칭되는 경우 모두 검색됩니다. 예를 들어, 줄의 시작 부분에 “apple”패턴이 매칭되는 경우 모든 줄을 매칭할 수 있습니다.

import re

pattern = "^apple"
text = "apple is\n\n\nthe\n\n\nbest\n\nfruit\n"  
matches = re.findall(pattern, text, re.MULTILINE)
print(matches)  # 출력: ['apple', 'apple']

3. re.DOTALL (re.S)

이 옵션은 줄 바꿈 문자를 포함한 모든 문자와 매칭합니다. 기본적으로 정규식의 . 메타문자는 줄 바꿈 문자를 매칭하지 않습니다. 하지만 re.DOTALL 옵션을 사용하면 줄 바꿈 문자를 포함한 모든 문자와 매칭할 수 있습니다.

import re

pattern = "apple.*fruit"
text = "I have an apple\nIt's my favorite fruit"
match = re.search(pattern, text, re.DOTALL)
print(match.group())  # 출력: 'apple\nIt's my favorite fruit'

4. re.ASCII (re.A)

이 옵션은 ASCII 문자만 매칭합니다. 일부 유니코드 문자는 여러 바이트로 표현되는 경우가 있습니다. 하지만 re.ASCII 옵션을 사용하면 ASCII 문자만 매칭하므로 유니코드 문자는 무시됩니다.

import re

pattern = "[a-z]+"
text = "안녕하세요 Hello"
matches = re.findall(pattern, text, re.ASCII)
print(matches)  # 출력: ['ello']

위에서 설명한 매칭 옵션은 정규식 매칭에 유연성을 제공하고 원하는 결과를 얻을 수 있도록 도와줍니다. 정규식을 사용할 때 적절한 매칭 옵션을 선택하여 문제를 해결해 보세요.