Regex

1 minute read

Published:

Regex

서론

미루고 미루고 미뤄왔던 정규표현식 공부를 해보자.
정규표현식(=정규식)은 문자열이 특정 패턴과 일치하는지 검사하는 것이라고 생각하면 된다.
정규표현식은 텍스트 처리를 하는 어느 곳이든지 사용할 수 있다.

어디에 사용되는가?

  • 비밀번호, 이메일, 전화번호 등 입력이 형식에 맞는지
  • 크롤링 후 텍스트에서 필요한 부분만 추출
  • 매칭되는 패턴 찾기(아래 사진처럼)

사실 세 항목 다 문자열이 특정 패턴과 일치하는지 보는 것이며, 본질은 같다.

아래 포스팅은 간단한 예제만 살펴볼 것이고, 정규표현식을 빠르고 쉽게 이해하려면 이 유튜브 영상을 보는걸 강추x100

본론

아래와 같은 요구사항을 정규표현식으로 해결해보자

  1. 패스워드에 대문자, 소문자, 숫자, !#%& 를 제외한 다른 어떤 문자도 포함되면 안돼요
  2. 같은 문자가 4번 이상 연속하면 안돼요

비밀번호 정규식, 이메일 정규식 등 검색만하면 일반적으로 많이 쓰이는 정규표현식이 나오지만, 위 요구사항처럼 custom한 정규표현식도 쓸 줄 알면 좋다.

첫번째 요구는 텍스트에서 a~z, A~Z, 0~9, !, #, %, & 이외의 글자가 하나라도 있는지 파악해보면 된다.

import re

def is_valid(input_string):
    result = True

    p = re.compile(r'[^a-zA-Z0-9!#%&]') # 텍스트에서 a~z, A~Z, 0~9, !, #, %, &를 제외한 character를 찾을때 사용
    if p.search(input_string):
        result = False
    return result

두번째 요구도 마찬가지로 정규표현식으로 해결이 가능하다. 여기 참고했음

def is_valid(input_string):
    result = True

    p = re.compile(r'(.)\1{3,}')
    if p.search(input_string):
        result = False
    return result
	
# (.) makes group from one char (any char)
# \1{3,} matches three or more characters from 1st group

맺으며

개인적으로 평~~~~~생쓰는 개념이라고 생각하니 꼭 익숙해지자.

참고 자료

https://www.youtube.com/watch?v=t3M6toIflyQ

Comments