728x90
복잡한 문자열에서 특정 패턴을 검색, 추출, 치환하는 방법을 배웁니다.
1. re 모듈의 4가지 핵심 함수
import re 가 항상 필요합니다.
- re.search(패턴, 문자열):
- 문자열 전체를 검색하여 **첫 번째로 일치하는 객체(Match Object)**를 반환합니다.
- 일치하는 것이 없으면 None을 반환합니다.
match = re.search(r'\d+', 'My number is 1234 and 5678')
if match:
print(match.group()) # 출력: '1234' (첫 번째 숫자만)
- re.findall(패턴, 문자열):
- 문자열 전체를 검색하여 일치하는 모든 부분을 **리스트(list)**로 반환합니다.
- 코딩 테스트에서 가장 유용하게 사용됩니다.
numbers = re.findall(r'\d+', 'My number is 1234 and 5678')
# numbers -> ['1234', '5678']
- re.sub(패턴, 바꿀문자열, 원본문자열):
- 'substitute'의 약자. 일치하는 모든 패턴을 바꿀문자열로 치환합니다.
s = 'A man, a plan, a canal: Panama'
# [^a-z0-9] (알파벳/숫자가 아닌것)을 '' (빈문자열)로 치환
processed = re.sub(r'[^a-z0-9]', '', s.lower())
# processed -> 'amanaplanacanalpanama'
- re.split(패턴, 문자열):
- 패턴에 일치하는 부분을 **구분자(delimiter)**로 삼아 문자열을 쪼개어 리스트로 반환합니다.
text = 'apple,banana;orange|kiwi'
# 쉼표, 세미콜론, 파이프 기호를 모두 구분자로 사용
fruits = re.split(r'[,;|]', text)
# fruits -> ['apple', 'banana', 'orange', 'kiwi']
2. 코딩 테스트 필수 패턴 (메타 문자)
함수를 알았으니 이제 '패턴'을 만드는 문법을 알아야 합니다.
[] (문자 집합): "이 중 하나!"
- [abc] : 'a' 또는 'b' 또는 'c'
- [a-z] : 'a'부터 'z'까지 모든 소문자
- [a-zA-Z0-9] : 모든 알파벳 대소문자 + 모든 숫자 (가장 많이 씀)
- [^abc] : ^가 [] 안에 있으면 부정(NOT). 'a', 'b', 'c'를 제외한 모든 문자.
- [^a-z0-9] : 알파벳과 숫자를 제외한 모든 문자 (공백, 구두점 등)
\ (특수 시퀀스): "자주 쓰는 약어!"
- \d : 숫자(Digit) 1개. [0-9]와 동일.
- \D : 숫자가 아닌(Non-Digit) 문자 1개. [^0-9]와 동일.
- \w : 단어(Word) 문자 1개. [a-zA-Z0-9_] (알파벳, 숫자, 언더스코어)와 동일.
- \W : 단어 문자가 아닌(Non-Word) 문자 1개. [^a-zA-Z0-9_]와 동일.
- \s : 공백(Space) 문자 1개. (스페이스, 탭, 줄바꿈 등)
- \S : 공백이 아닌(Non-Space) 문자 1개.
* + ? (수량자): "몇 개?"
- + (1개 이상):
- \d+ -> 숫자가 1개 이상 연속된 것 (예: '1', '123', '99999')
- 코딩 테스트에서 re.findall(r'\d+', ...)로 문자열에서 숫자만 뽑아낼 때 가장 많이 씁니다.
- * (0개 이상):
- ab*c -> 'ac', 'abc', 'abbbc' (b가 0개 이상)
- ? (0개 또는 1개):
- ab?c -> 'ac', 'abc' (b가 0개 또는 1개)
3. r'' (Raw String)의 중요성
정규식 패턴을 파이썬 문자열로 쓸 때는 반드시 앞에 r을 붙여야 합니다. r'...' (Raw String의 약자)
- 이유: 파이썬은 '\n'을 '줄바꿈'으로, '\t'를 '탭'으로 해석합니다. 하지만 정규식에서 \d, \w의 \는 '특수 시퀀스'라는 고유의 의미가 있죠.
- **r''**은 파이썬에게 "이 안에 있는 \는 파이썬 문법이 아니라 그냥 날것(raw) 그대로의 문자로 취급해!"라고 알려주는 역할을 합니다.
- 잘못된 예: re.sub('\w', ...) (X)
- 올바른 예: re.sub(r'\w', ...) (O)
728x90
'알고리즘 공부' 카테고리의 다른 글
| 파이썬 컴프리핸션(Comprehension) (0) | 2025.10.31 |
|---|---|
| C++ vscode에서 백준 알고리즘 풀이 셋팅 (1) | 2025.04.05 |
| [Condingame] DWARFS STANDING ON THE SHOULDERS OF GIANTSUTER(트리 자료구조의 높이 구하기 - 그래프, 재귀) (1) | 2023.05.15 |
