이번글은 정규표현식에 대해 설명하는 글 입니다. 정규 표현식을 검색해보면 "특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어" 라고 설명이 되어있음
정규 표현식은 주어진 문자열에서 발견할 수 있는 글자 패턴을 표현한 식 입니다. 쉡게 말해서 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어입니다. 정규표현식을 활용하면 복잡한 문자열 처리 작업을 효율적으로 수행할 수 있습니다.
정규표현식이 유용한 대표적인 사례들은 다음과 같습니다:
정규표현식에서는 특별한 의미를 갖는 메타문자를 사용합니다. 자주 사용되는 메타문자와 그 의미를 살펴보겠습니다.
패턴 | 설명 | 예시 |
---|---|---|
. | 줄바꿈을 제외한 모든 문자 한 개와 매칭 | "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"
이렇게 변환됩니다
암튼 뭐 그렇습니다.