정규표현식

알고리즘 문제를 풀 때 사용하는 정규표현식을 배워봅니다.


정규식

정규식이란 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어입니다
복잡한 문자열의 검색과 치환을 효율적으로 처리하기 위해 사용됩니다
저는 파이썬을 사용하지만 파이썬 뿐만 아니라 문자열을 처리하는 모든 곳에서 사용할 수 있습니다

정규식 표현 표

특정 문자 제거 예시

특정 문자열에서 알파벳, 숫자, 마침표, 느낌표를 제외한 모든 문자를 제거하는 예시입니다

import re
# 파이썬의 모듈, sub함수는 (특정 문자, 바꿀 문자, 문자열)로 구성
answer = re.sub('[^a-zA-Z0-9.!]', '', answer)
# 기존 문자 : !@supe#*r.man
# 바뀐 문자 : !super.man

[a-zA-Z0-9.!]는 알파벳 소문자, 대문자, 숫자, 마침표와 느낌표를 의미합니다
이 문자들을 제외한 모든 문자를 제거하야 하므로 ^(not)를 붙혔습니다

치환 예시

특정 문자열에서 물음표가 2번 이상 연속되는 부분을 1개의 물음표로 치환하는 예시입니다

answer = re.sub('\?+', '.', answer)
# 기존 문자 : abc???def??gih??
# 치환된 문자 : abc?def?gih?

+는 정규식에서 ‘앞 패턴이 하나 이상이면’ 이라는 의미를 가지고 있습니다
\?.+는 마침표가 하나 이상 반복되는 패턴을 마침표 하나로 치환합니다

첫부분과 끝부분 검사

문자의 첫부분과 끝부분이 마침표인지 검사를 통해 마침표일 경우 마침표를 문자열에서 제거하는 예시입니다

answer = re.sub('^[.]|[.]$', '', answer)
# 기존 문자 : .Hello world
# 바뀐 문자 : Hello world

^[.] 는 .로 시작되는 경우를 뜻하며 [.]$는 .로 끝나는 경우를 뜻합니다
중간에 |를 사용하여 둘 중 하나라도 참일 경우 마침표가 있는 부분을 제거합니다

자주 쓰이는 정규표현식

# 이메일 검사 , 문자@문자.문자(최소 2, 최대 4자) 형식으로 이루어지는지 검사
return bool(re.match('^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-z0-9]{2,4}+$', email))

# 올바른 암호 형식 검사, 대문자 하나, 소문자 하나, 숫자 하나가 포함되며 최소 8글자, 최대 15글자인지 확인
return bool(re.match('(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15}', password))

# 올바른 전화번호인지 검사, 숫자로 구성된지와 [2~3] - [3~4] - [4] 자리인지 검사
return bool(re.match('^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$', phone_number))

# 한글로 구성되어있는지 검사
return bool(re.match('^[가-힣]+$', string))

# 한글과 띄어쓰기로만 구성되어있는지 검사
return bool(re.match('^[가-힣\s]+$', string))

Leave a comment