정규표현식

KIM DO YOON·2025년 4월 2일
0

이번글은 정규표현식에 대해 설명하는 글 입니다. 정규 표현식을 검색해보면 "특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어" 라고 설명이 되어있음

정규 표현식의 기본 개념

정규 표현식은 주어진 문자열에서 발견할 수 있는 글자 패턴을 표현한 식 입니다. 쉡게 말해서 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어입니다. 정규표현식을 활용하면 복잡한 문자열 처리 작업을 효율적으로 수행할 수 있습니다.

정규표현식이 필요한 이유

정규표현식이 유용한 대표적인 사례들은 다음과 같습니다:

  • 다양한 형식의 전화번호, 이메일, IP 주소 등의 데이터 추출
  • 사용자 입력 데이터의 유효성 검증
  • 코드에서 특정 변수명 검색 및 치환
  • 특정 조건에 따른 문자열의 공백이나 특수문자 제거
  • 데이터 정제 및 전처리 작업

정규표현식의 기본 문법과 메타문자

정규표현식에서는 특별한 의미를 갖는 메타문자를 사용합니다. 자주 사용되는 메타문자와 그 의미를 살펴보겠습니다.

문자 매칭 기본 패턴

패턴설명예시
.줄바꿈을 제외한 모든 문자 한 개와 매칭"g." - g가 들어간 모든 단어들과 매칭
^문자열의 시작"^x" - x로 시작하는 문자열
$문자열의 끝"$x" - x로 끝나는 문자열
[ ]대괄호 안의 문자 중 하나와 매칭"[xyz]" - x, y, z 중 하나 또는 모두 포함
[^ ]대괄호 안의 문자를 제외한 문자 매칭"[^xyz]" - x, y, z를 포함하지 않는 문자

반복 패턴

패턴설명예시
*앞 패턴이 0번 이상 반복"x*" - x가 0번 또는 그 이상 반복
+앞 패턴이 1번 이상 반복"x+" - x가 한 번 이상 반복
?앞 패턴이 0번 또는 1번 등장"x?" - x가 있거나 없음
{n}앞 패턴이 n번 반복"x{3}" - x가 정확히 3번 반복
{n,}앞 패턴이 n번 이상 반복"x{3,}" - x가 3번 이상 반복
{n,m}앞 패턴이 n번 이상 m번 이하 반복"x{2,4}" - x가 2~4번 반복

특수 문자 클래스

패턴설명동일 표현
\d모든 숫자[0-9]와 동일
\D숫자가 아닌 문자[^0-9]와 동일
\w영문자, 숫자, 밑줄(_)[A-Za-z0-9_]와 동일
\W영문자, 숫자, 밑줄이 아닌 문자[^A-Za-z0-9_]와 동일
\s공백 문자스페이스, 탭 등
\S공백이 아닌 문자
\b단어 경계"welcome to my world"에서 "\bto\b"는 "to"와 매칭

그룹화와 선택

패턴설명예시
( )패턴을 그룹화"(xy)" - xy 순서대로 모두 포함
|OR 연산"x|y" - x 또는 y 포함

실전 정규표현식 활용 예시

이제 실제 데이터 분석 상황에서 활용할 수 있는 다양한 정규표현식의 예시를 살펴보겠습니다.

이메일 주소 검증

이메일 주소의 유효성을 검사하는 정규표현식입니다.

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

이 패턴은 다음과 같이 동작합니다:

  • ^ - 문자열의 시작
  • [a-zA-Z0-9._%+-]+ - 이메일 주소의 사용자 부분(@ 앞부분)
  • @ - @ 기호
  • [a-zA-Z0-9.-]+ - 도메인 이름
  • \. - 점(.)
  • [a-zA-Z]{2,} - 최소 2자 이상의 최상위 도메인(com, net 등)
  • $ - 문자열의 끝

전화번호 추출 및 마스킹

전화번호를 추출하고 중간 부분을 마스킹하는 예시입니다.

(\d{3})[-](\d{4})[-](\d{4})

이 패턴을 사용해 010-1234-5678과 같은 전화번호에서 중간 부분을 마스킹하면:

import re
data = "KIM 010-1111-2222"
pattern = re.compile("(\d{3})[-](\d{4})[-](\d{4})")
masked = pattern.sub("\g<1>-****-\g<3>", data)
# 결과: "KIM 010-****-2222"

이렇게 변환됩니다

암튼 뭐 그렇습니다.

profile
안녕하세요 김도윤 입니다.

0개의 댓글