정규 표현식은 문자열에서 패턴을 찾고, 특정한 규칙에 맞는 문자열을 매칭하고 추출하는 데 사용되는 도구이며, 파이썬은 정규 표현식을 처리하기 위해 re 모듈을 제공하고 있다.
정규 표현식의 기본 문법
정규 표현식은 패턴을 표현하기 위한 문자열이다. 다양한 메타문자와 특수 시퀀스를 사용하여 패턴을 정의할 수 있다.
패턴을 표현한 후, 이를 활용하여 문자열에서 패턴을 검색하거나 추출할 수 있으며, 주요한 메타문자와 특수 시퀀스는 다음과 같다.
- . : 임의의 한 문자와 매치
- ^ : 문자열의 시작과 매치
- $ : 문자열의 끝과 매치
- * : 바로 앞에 있는 문자가 0번 이상 반복되는 패턴과 매치
- + : 바로 앞에 있는 문자가 1번 이상 반복되는 패턴과 매치
- ? : 바로 앞에 있는 문자가 0번 또는 1번 나타나는 패턴과 매치
- [] : 대괄호 안에 있는 문자 중 하나와 매치
- () : 그룹을 만들고 해당 그룹을 하나의 문자로 취급
정규 표현식 함수
파이썬의 re 모듈은 다양한 함수를 제공하여 정규 표현식을 활용한 문자열 처리를 지원한다.
- search(pattern, string) : 주어진 패턴과 일치하는 첫 번째 문자열을 검색하여 매치 객체를 반환
- match(pattern, string) : 주어진 패턴과 문자열의 시작부터 일치하는지 확인하여 매치 객체를 반환
- findall(pattern, string) : 주어진 패턴과 일치하는 모든 문자열을 찾아 리스트로 반환
- split(pattern, string) : 주어진 패턴을 기준으로 문자열을 분리한 후 리스트로 반환
- sub(pattern, repl, string) : 주어진 패턴과 일치하는 문자열을 대체 문자열로 치환한 후 결과 문자열을 반환
문자열 처리 예시
이메일 주소 추출
import re
text = "제 이메일 주소는 abc@example.com입니다."
pattern = r'\b\w+@\w+\.\w+\b'
result = re.search(pattern, text)
if result:
email = result.group()
print(email) # 출력: abc@example.com
위 예시에서는 주어진 텍스트에서 이메일 주소를 추출하는 패턴을 정규 표현식으로 표현했다.
search 함수를 사용하여 첫 번째로 일치하는 이메일 주소를 찾고, group 메서드를 통해 매치된 문자열을 가져와 출력한다.
숫자 추출
import re
text = "오늘의 할인율은 30%입니다."
pattern = r'\d+'
numbers = re.findall(pattern, text)
if numbers:
for num in numbers:
print(num) # 출력: 30
위 예시에서는 주어진 텍스트에서 숫자를 추출하는 패턴을 정규 표현식으로 표현했다.
findall 함수를 사용하여 모든 숫자를 리스트로 반환하고, 리스트의 각 요소를 출력한다.