다섯 퍼즐로 문법을 한 번에 묶어 봐
답을 바로 펼치지 말고 먼저 입력과 기대 결과를 직접 적어 봐. 패턴 후보를 만든 뒤 정상·실패·경계 입력을 통과시킨 다음 아래 풀이와 비교해.
퍼즐 1: 길이가 3~5인 회문
mom, eye, level, civic처럼 앞뒤가 같은 단어를 찾아. 단어 경계와 길이별 중심 구조를 함께 표현해야 해.
퍼즐 2: 앞에 buzz가 없는 fizz
buzzfizz와 buzz fizz의 fizz는 건너뛰고, 홀로 나온 fizz만 찾아.
퍼즐 3: 모음이 정확히 두 개인 문자열
cat, beat, beats, beautiful 가운데 beat와 beats만 성공해야 해.
퍼즐 4: ANSI 색 코드 제거
터미널 출력의 \x1b[31m, \x1b[1;32m 같은 제어 코드를 찾되 주변 글자는 그대로 남겨.
퍼즐 5: 나란히 반복된 단어
the the cat와 sat sat에서 반복된 단어를 찾아 반환해.
풀이
1. \b(?:(\w)(\w)\1|(\w)(\w)\4\3|(\w)(\w)(\w)\6\5)\b는 길이 3, 4, 5를 별도 대안으로 두고 역참조로 좌우 대칭을 확인해. 실행 예시도 같은 패턴을 사용해.
2. (?<!buzz)(?<!buzz )\bfizz\b는 길이 4와 5인 앞 문맥을 고정 길이 후방 탐색 두 개로 나눠 Python 내장 re에서도 컴파일돼.
3. ^[^aeiou]*[aeiou][^aeiou]*[aeiou][^aeiou]*$는 모음 두 개 사이와 양끝을 비모음만 허용해.
4. \x1b\[[\d;]*m은 이스케이프 문자, 여는 대괄호, 숫자와 세미콜론, 마지막 m을 차례로 찾아.
5. \b(\w+)\s+\1\b은 첫 단어를 캡처한 뒤 역참조로 같은 단어가 다시 오는지 확인해.
정답보다 선택 이유를 설명할 수 있어야 해
퍼즐 1에서 길이마다 중심 구조가 왜 다른지, 퍼즐 2에서 후방 탐색을 왜 둘로 나눴는지 말할 수 있다면 문법을 외운 단계를 넘어선 거야. 전후방 탐색이 멋져 보여도 더 작은 문자 클래스나 캡처 그룹으로 풀 수 있는지 먼저 살펴보고, 실제 문제를 만족하는 가장 작은 도구를 골라.