regular expression(re):정규표현식

nichol·2022년 5월 14일
0

Django

목록 보기
3/15

python 모듈 중 하나인 re모듈에 대해서

1. re모듈이란?

Lib/re.py 공식문서에서 첫문장에 "Support for regular expressions (RE)." 포현으로 시작한다. 직역하면 "정규식 지원"이다.

2. 정규표현식이란 ?

MDN WEB docs에서는 정규표현식을 “정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다.” 라고 표혀낳고 있습니다

  • 정규식은 일정 패턴을 가지고 있는 문자열을 찾거나, 일정패턴을 가지고있는지 판단하는 방식으로 대표적으로 주민번호, 연락처(핸드폰번호, 전화번호), 이메일 등 이 있으며, 이 정규식을 통해 지금 이 문자열이 주민번호인지 그냥 숫자들의 조합인지, 연락처인지 아닌지, 이메일인지 아닌지를 구분하는지, 어디위치에있는지와 같은 기술을 말합니다.

3. 정규식의 패턴 표현 형식

출처 : https://great-developer.tistory.com/228

자주 사용하는 문자 클래스

  • \d, \D : [0-9], [^0-9]
  • \s, \S : [ \t\n\r\f\v], [^ \t\n\r\f\v]
  • \w, \W: [a-zA-Z0-9_], [^a-zA-Z0-9_]

참조 : https://docs.python.org/ko/3/howto/regex.html#introduction( 파이썬 정규식 관련 공식문서 )

4. 많이 쓰이는 정규표현식 패턴 모음

  1. 이메일 패턴
    1. ^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$
    2. [a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
    3. ^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
  2. 핸드폰번호 패턴
    1. \d{3}-\d{3,4}-\d{4} : 정수 3개 - 정수3~4개-정수4개
    2. ^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})$
    3. ^(01)\d{1}-\d{3,4}-\d{4}$
  3. 주민번호
    1. (\d{6})[-]\d{7}
  4. 유선전화
    1. ^0\d-\d{4}-\d{4}
  5. 암호
    1. ^[A-Za-z0-9]{6,12}$ : 숫자 문자 포함 6~12자리 이내
    2. ^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$ :
      숫자 문자 특수문자 포함 8~15자이내
    3. ^(?!((?:[A-Za-z]+)|(?:[~!@#$%^&*()_+=]+)|(?=[0-9]+))$)[A-Za-z\d~!@#$%^&*()_+=]{10,}$:
      숫자 문자 특수문자 중 2가지이상 조합하여 10자리이내
  6. 생년월일
    1. ([0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1,2][0-9]|3[0,1]))[6자리]
    2. ^(19[0-9][0-9]|20\d{2})(0[0-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ [8자리/00000000]
    3. ^(19[0-9][0-9]|20\d{2})-(0[0-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$[8자리/0000-00-00]

5. 메소드 정리

1. re.compile(패턴)

정규식 객체로 컴파일할수 있으며 이 객체로 match(), search() 등의 메소드 사용 가능

compile은 정의된 패턴이 여러번 사용될경우 효율성이 좋고 한번만 사용할때는 권장하지않는다.

2. re.search(패턴, 문자열)

문자열이 패턴에 일치하는 하는지 확인, 어느 한부분이라도 일치하면 일치하는 문자열을 반환하고 일치하지안으면 None를 반환한다

3. re.match(패턴, 문자열)

search와 동일하지만 시작부분, 위치 모두동일해야 반환한다.

4. findall(패턴, 문자열, 플래그)

문자열 안에 패턴에 맞는 케이스를 전부 찾아서 리스트로 반환합니다.

5. split(패턴, 문자열, 최대 split 수, 플래그)

문자열에서 패턴이 맞으면 이를 기점으로 리스트로 분할 해준다. 만약 3번째 인자(최대 split 수)를 지정하면 문자열을 지정한 수 만큼 쪼개고 그 수가 도달하면 쪼개지 않습니다.

6. sub(패턴, 교체할 문자열, 문자열, 최대 교체 수, 플래그)

문자열에 맞는 패턴을 2번째 인자(교체할 문자열)로 교체

split의 최대 split 수와 동일하게 최대 교체 수를 지정하면 문자열에 맞는 패턴을 교체할 문자열로 교체하고 그 수가 도달하면 더이상 교체하지 않습니다.

참고 : https://docs.python.org/ko/3/library/re.html?highlight=re#module-re
https://brownbears.tistory.com/506

profile
WEB Developer

0개의 댓글