PYTHON/파이썬 기초

[PYTHON] 정규 표현식

G허니 2024. 3. 1. 15:42

정규 표현식은 Python만의 기능이 아닌, 문자열을 다루는 여러 곳에서 사용되는 공통된 표현식입니다.
처음에는 이해하기 어려울 수 있지만, 한번 익혀두면 매우 유용한 기능입니다.

 

정규식 사용 전/후 비교


정규 표현식을 사용하면 복잡한 반복문 없이도 간결한 코드를 작성할 수 있습니다.
예를 들어, 문자열에서 이름과 전화번호가 섞여 있는 경우, 전화번호 뒤 네 자리를 XXXX로 변경하는 상황을 생각해봅시다.

 

1) 반복문으로 처리
반복문을 사용하여 전화번호 뒷자리를 XXXX로 변경하는 코드는 다음과 같습니다.

# 이름과 전화번호가 섞여 있는 문자열
peoples = '김철수: 010-1234-5678 박영희: 010-4321-8765 이민지: 010-2143-6587'

# 전화번호 뒷자리 숨기기
phone_x = []
for word in peoples.split(' '):
    if len(word) == 13 and word[:3].isdigit() and word[4:8].isdigit() and word[9:13].isdigit():
        word = word[0:8] + '-XXXX'
        phone_x.append(word)
    else:
        phone_x.append(word)
peoples_new = ' '.join(phone_x)
print(peoples_new)

 

2) 정규식으로 처리
반면, 정규식을 사용하면 훨씬 간결하게 같은 기능을 수행할 수 있습니다.

# 전화번호 뒷자리 숨기기
import re
re.sub('(\d{3}[-]\d{4})[-]\d{4}', '\g<1>-XXXX', peoples)

 

 

기본적인 정규식


정규식을 사용하려면 먼저 re 라이브러리를 import 해야 합니다.

 

# 모듈 불러오기
import re

 

 

정규식에서는 다음과 같은 메서드를 사용하여 특정 패턴의 문자열을 확인할 수 있습니다.

  • match() 메서드: 문자열 처음부터 정규식과 매치 여부를 확인합니다.
  • search() 메서드: 문자열 전체를 대상으로 정규식과 매치 여부 확인합니다.
  • findall() 메서드: 정규식과 매치되는 모든 문자열을 리스트 형태로 반환합니다.
  • finditer() 메서드: 정규식과 매치되는 모든 문자열을 반복 가능한 개체로 반환합니다.
# 문자열에 'a' 문자가 있는지 확인
string = 'Life is like a box of chocolates.'
print(re.search('a', string))
print(re.search('f', string))

 

 

매치된 결과는 다음과 같은 메서드로 확인할 수 있습니다.

  • group(): 매치된 문자열을 반환합니다.
  • start(): 매치된 문자열의 시작 위치를 반환합니다.
  • end(): 매치된 문자열의 끝 위치를 반환합니다.
  • span(): 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 반환합니다.
# 'box' 문자열 찾기
string = 'Life is like a box of chocolates.'
result = re.search('box', string)
print(result.group())
print(result.start())
print(result.end())
print(result.span())

 

findall() 메서드는 정규식과 매치되는 모든 문자열을 리스트 형태로 반환합니다.

# 'o' 문자 찾기
string = 'Life is like a box of chocolates.'
re.findall('o', string)

 

finditer() 메서드는 정규식과 매치되는 모든 문자열을 반복 가능한 객체로 반환합니다.

# 반복문으로 표시
string = 'Life is like a box of chocolates.'
result = re.finditer('o', string)
for i in result:
    print(i)