메타 문자
2022.08.25 - 정규 표현식 (Regular Expressions)에서 다루지 않은 메타 문자를 정리하고자 한다.
|
OR과 동일하다. A|B라는 정규식은 A 또는 B라는 의미다.
import re
print(re.search('Crow|Servo', 'CrowHello'))
^
문자열의 맨 처음과 일치함을 의미한다.
import re
print(re.search('^Life', 'Life is too short'))
print(re.search('^Life', 'My Life'))
My Life는 Life가 맨 처음에 위치하고 있지 않아 None을 반환한다.
$
문자열의 끝과 일치함을 의미한다.
import re
print(re.search('short$', 'Life is too short'))
print(re.search('short$', 'Life is too short, you need python'))
\A
문자열의 처음과 일치함을 의미한다. ^ 문자와 동일하지만 re.MULTILINE 옵션을 사용할 때 차이점이 있다.
re.MULTILINE
여러 줄과 일치할 수 있도록 한다.
아래와 같이 문자열의 처음이 python, 공백, 단어로 이루어진 경우를 찾을 때, 옵션 없이 실행하면 python one만을 찾는다. 문자열 전체에서 일치하는 부분을 찾기 때문이다.
data = """python one
life is too short
python two
you need python
python three"""
print(re.findall("^python\s\w+", data))
re.MULTILINE 옵션을 사용하면 각 행마다 패턴이 일치하는지를 확인하므로 총 3개의 문자열을 찾을 수 있다.
data = """python one
life is too short
python two
you need python
python three"""
print(re.findall("^python\s\w+", data, re.MULTILINE))
하지만 \A를 사용하면 re.MULTILINE 옵션을 사용해도 전체 문자열의 처음이 일치하는지를 확인한다.
data = """python one
life is too short
python two
you need python
python three"""
print(re.findall("\Apython\s\w+", data, re.MULTILINE))
\Z
문자열의 끝과 일치하는지 확인한다. \A와 동일하게 re.MULTILINE 옵션을 사용해도 $와는 다르게 전체 문자열의 끝만을 확인한다.
\b
단어 구분자(Word boundary)를 의미한다. 보통 단어는 whitespace에 의해 구분된다.
import re
print(re.search(r'\bclass\b', 'no class at all'))
print(re.search(r'\bclass\b', 'the declassified algorithm'))
declassified는 class라는 문자열을 포함하는 단어이지만 공백이 존재하지 않아 패턴에 일치하지 않는다.
💡 r 기호
\b는 파이썬 리터럴 규칙에 의해 백스페이스를 의미하므로, raw string을 의미하는 기호 r을 붙여주어야 의도한 대로 동작한다.
\B
\b와 반대로 whitespace로 구분된 단어가 아닌 경우에만 일치한다.
import re
print(re.search(r'\Bclass\B', 'no class at all'))
print(re.search(r'\Bclass\B', 'the declassified algorithm'))
참고 문서