백슬래시는 Python과 정규식에서 두 번 해석될 수 있어
Python 문자열에서 \는 이스케이프 문자라 '\n'은 줄바꿈, '\t'는 탭, '\b'는 코드 포인트 8인 백스페이스가 돼. 정규식 엔진도 \d, \b, \.처럼 백슬래시로 별도 문법을 표현해.
일반 문자열로 정규식의 \d를 전달하려면 '\\d'처럼 Python 문자열 단계에서 백슬래시를 하나 더 써야 해. 두 문법을 한 줄에서 세다 보면 실수하기 쉽지.
정규식 리터럴에는 원시 문자열을 기본으로 써
r'\d+'처럼 앞에 r을 붙이면 Python이 백슬래시를 제어 문자로 바꾸지 않고 정규식 엔진에 전달해. r'\b\w+\b'도 코드에 보이는 경계와 문자 클래스가 그대로 패턴이 돼.
'\b'는 단어 경계가 아니야
re.search('\bword', text)라고 쓰면 정규식 엔진은 단어 경계가 아니라 \x08word를 받아. '\d'처럼 우연히 원하는 두 문자가 남는 경우도 있지만, Python 버전의 경고 동작까지 달라질 수 있으니 그 우연에 기대지 마.
직접 적는 Python 정규식 패턴은 원시 문자열로 쓰는 습관을 들여. 그러면 코드에 보이는 패턴과 엔진이 받는 패턴 사이의 차이를 줄일 수 있어.
동적 값을 넣을 때는 값부터 이스케이프해
변수를 끼우는 패턴은 rf'\b{word}\b'처럼 원시 f-string으로 만들 수 있어. 변수 값 자체를 문자 그대로 찾으려면 rf'\b{re.escape(word)}\b'처럼 re.escape를 적용해.