Python 정규식 플래그
정규식 작업 메서드의 선택적 매개변수 중 하나로 플래그를 설정하려면 다음 구문을 사용합니다:
flags=re.플래그 이름
정규식 작업을 위한 주요 플래그
| 플래그 | 목적 |
|---|---|
re.IGNORECASE |
문자 대소문자 무시. |
re.DOTALL |
점(.)이 줄 바꿈을 포함한 모든 문자와 일치하도록 합니다. |
re.I |
대소문자를 구분하지 않는 검색을 수행합니다. |
re.L |
현재 언어에 따라 단어를 검색합니다. 이 해석은 알파벳 그룹(\w 및 \W)과 단어 경계 동작(\b 및 \B)에 영향을 미칩니다.
|
re.M |
문자 $가 텍스트 끝뿐만 아니라 모든 줄의 끝에서 검색을 수행하고, 문자 ^가 텍스트 시작뿐만 아니라 모든 줄의 시작에서 검색을 수행합니다.
|
re.S |
점 (.)의 의미를 새 줄을 포함한 모든 문자와 일치하도록 변경합니다.
|
re.U |
Unicode 문자 집합에 따라 문자를 해석합니다. 이 플래그는 \w, \W, \b, \B의 동작에 영향을 미칩니다. Python 3+에서는 이 플래그가 기본적으로 설정되어 있습니다.
|
re.X |
정규식의 다중 줄 구문을 허용합니다. 패턴 내의 공백([] 집합 내부의 공백이나 백슬래시로 이스케이프된 경우 제외)을 무시하고, 이스케이프되지 않은 '#'를 주석으로 처리합니다.
|
예시
re.IGNORECASE 플래그를 사용하여 문자 대소문자를 무시할 수 있습니다. 어떻게 하는지 알아보겠습니다. 이 예시에서 정규식은 소문자만 찾습니다:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
코드 실행 결과:
'! ! CCC DDD'
예시
이제 메서드의 네 번째 매개변수에 re.IGNORECASE 플래그를 추가하면 정규식이 모든 대소문자의 문자를 검색하기 시작합니다:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
코드 실행 결과:
'! ! ! !'
예시
정규식으로 모든 줄 바꿈을 찾아보겠습니다:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
실행된 코드 결과:
'aaa!bbb'
예시
하지만, 모든 문자를 바꾸려면 정규식에 점을 넣어도 줄 바꿈은 잡히지 않습니다:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
실행된 코드 결과:
'!!!
!!!'
예시
이 오류를 수정하려면 re.DOTALL 플래그를 적용해야 합니다:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
실행된 코드 결과:
'!!!!!!!'
예시
매개변수에 + 연산자를 사용하여 여러 플래그를 전달할 수도 있습니다. 먼저 줄 끝의 문자 'a'를 바꿔보겠습니다:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
실행된 코드 결과:
'''
aaa
AAA
!
'''
예시
이제 re.M 플래그를 설정해 보겠습니다:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
실행된 코드 결과:
'''
!
AAA
!
'''
예시
이제 대소문자 무시 플래그도 적용해 보겠습니다:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
실행된 코드 결과:
'''
!
!
!
'''