[정규표현식] 파이썬 정규표현식 종류 및 re 모듈 함수 사용법

728x90

1. 정규표현식 종류 및 설명

패턴 설명
^ 문자열의 시작을 의미한다.
$ 문자열의 끝을 의미한다.
* 앞 문자가 0번 이상 반복됨을 의미한다.
+ 앞 문자가 1번 이상 반복됨을 의미한다.
? 앞 문자가 0번 또는 1번 나타남을 의미한다.
{n} 앞 문자가 정확히 n번 반복됨을 의미한다.
{n,m} 앞 문자가 n번 이상 m번 이하로 반복됨을 의미한다.
[] 대괄호 안에 있는 문자 중 하나와 일치한다.
\d 숫자와 일치한다. [0-9]와 동일하다.
\D 숫자가 아닌 문자와 일치한다. [^0-9]와 동일하다.
\s 공백 문자와 일치한다.
\S 공백이 아닌 문자와 일치한다.
\w 문자 또는 숫자와 일치한다. [a-zA-Z0-9_]와 동일하다.
\W 문자나 숫자가 아닌 문자와 일치한다. [^a-zA-Z0-9_]와 동일하다.
. 임의의 한 문자와 일치한다. 줄바꿈 문자는 제외한다.

2. 정규표현식 함수들 정리

1) re.compile()

정규표현식을 컴파일하여 패턴 객체로 만든다. 이렇게 생성된 패턴 객체는 여러 번 사용할 수 있어 효율적이다.

import re
pattern = re.compile(r'\d+')  # 숫자에 대한 패턴 객체 생성

2) re.findall()

정규식에 일치하는 모든 문자열을 리스트로 반환한다. 이 함수는 문자열 내에 모든 매칭을 찾는 데 사용된다.

text = "오늘은 2024년 11월 19일입니다."
numbers = re.findall(r'\d+', text)  # ['2024', '11', '19'] 반환

3) re.search()

정규식에 일치하는 첫 번째 항목을 찾아 매치 객체를 반환한다. 일치하지 않으면 None을 반환한다. 이 함수는 특정 패턴이 존재하는지 여부를 검사하는 데 유용하다.

match = re.search(r'\d+', text)  # <re.Match object; span=(4, 8), match='2024'> 반환
if match:
    print(match.group())  # '2024'

4) re.split()

정규식을 기준으로 문자열을 분할하여 리스트로 반환한다. 여러 구분자를 동시에 사용할 수 있다.

tokens = re.split(r'\s+', text)  # 공백을 기준으로 분할, ['오늘은', '2024년', '11월', '19일입니다.'] 반환

5) re.sub()

정규식에 일치하는 부분을 다른 문자열로 대체한다. 주로 데이터 변환이나 마스킹에 사용된다.

replaced_text = re.sub(r'\d+', '****', text)  # '오늘은 ****년 ****월 ****일입니다.'로 변환

3. 각 함수 응용방법 추가

1) re.compile() 응용

re.compile()을 사용하면 반복적으로 사용할 패턴을 객체로 만들어서 성능을 향상시킬 수 있다. 예를 들어 긴 텍스트에서 여러 번 매칭해야 하는 경우 패턴 객체를 재사용할 수 있다.

pattern = re.compile(r'\b\w+\b')  # 단어 경계를 기준으로 모든 단어 찾기
words = pattern.findall(text)  # ['오늘은', '2024년', '11월', '19일입니다'] 반환

2) re.findall() 응용

re.findall()을 사용하여 특정 형식의 데이터를 추출할 수 있다. 예를 들어, 이메일 주소나 전화번호 등을 수집할 때 유용하다.

email_text = "문의는 example@test.com 또는 contact@domain.com으로 보내주세요."
emails = re.findall(r'[\w\.-]+@[\w\.-]+', email_text)  # ['example@test.com', 'contact@domain.com'] 반환

3) re.search() 응용

re.search()는 문자열에 특정 패턴이 포함되어 있는지 확인할 때 유용하다. 예를 들어 URL이 특정 프로토콜로 시작하는지 검사할 때 사용할 수 있다.

url = "https://www.example.com"
if re.search(r'^https?://', url):
    print("유효한 URL입니다.")  # URL이 http 또는 https로 시작하는지 확인

4) re.split() 응용

re.split()을 사용하여 문자열을 특정 구분자를 기준으로 분리할 수 있다. 여러 구분자를 동시에 사용하는 정규식을 통해 다양한 형식의 구분자로 분리할 수 있다.

text = "사과, 오렌지; 바나나: 포도"
fruits = re.split(r'[;,:\s]+', text)  # ['사과', '오렌지', '바나나', '포도'] 반환

5) re.sub() 응용

re.sub()을 사용하면 개인 정보 보호를 위해 데이터 마스킹을 할 수 있다. 예를 들어 전화번호의 일부를 숨기는 경우에 유용하다.

phone_number = "010-1234-5678"
masked_number = re.sub(r'\d{4}$', '****', phone_number)  # '010-1234-****'로 변환

 

728x90