[python] 정규 표현식

Bik_Kyun·2022년 3월 22일
0
post-thumbnail

1. 메타문자

. ^ $ * + ? () {} [] \ |

메타문자는 문자를 설명하기 위한 문자.
문자의 구성을 설명하기 위해 원래의 의미가 아닌 다른 의미로 쓰이는 문자를 말한다.
정규표현식에서는 정규표현식이 어떤 모양으로 구성되는지 표현하는데 쓰인다.

2. 정규표현식

Regular Expression은 일종의 문자를 표현하는 공식으로 특정 규칙이 있는 문자열 집합을 추출할 때 자주 사용되는 기법이다.

2-1) []

[][]사이의 문자들과 매치 라는 의미이다.

  • [abc] : 영어 소문자 a, b, c와 매치된다는 의미.
    'apple', 'bread' 등등 일치하는 문자만 있으면 매치가 된다.

2-2) -(하이픈), ^(캐럿)

-는 두 문자 사이의 범위를 의미한다.
^는 반대를 의미한다.

  • [a-z] : 알파벳 소문자와 매치
  • [A-Z] : 알파벳 대문자와 매치
  • [a-zA-Z] : 알파벳 모두 매치
  • [0-9] : 숫자와 매치
  • [^0-9] : 숫자가 아닌 문자와 매치
  • ^[] 안에서는 부정의 의미, []가 없으면 문자열의 처음을 뜻함(끝은 $로 표시)

2-3) (역슬래쉬)

[0-9][a-zA-Z]\를 통해 간단히 표현할 수 있다.

  • \d : 숫자와 매치, [0-9]와 동일한 표현.
  • \D : 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현.
  • \s : 공백 문자와 매치, [\t\n\f\r]와 동일한 표현.
  • \S : 공백 문자가 아닌 것과 매치, [^\t\n\f\r]와 동일한 표현.
  • \w : 문자 + 숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현.
  • \W : 문자 + 숫자가 아닌 것과 매치, [^a-zA-Z0-9_]와 동일한 표현.

2-4) .(닷)

줄바꿈 문자인 \n을 제외한 모든 문자와 매치된다.

a.b

a + 모든문자 + b를 의미한다.
a와 b 문자 사이에 어떤 문자가 들어가도 모두 매치가 된다는 의미이다.

a[.]b

문자클래스 []는 내부에 메타문자가 들어가도 문자 그대로 인식해준다.
그래서 a.b 그 자체를 의미하고 a0b와 같은 문자열은 매치되지 않는다.

2-5) 반복 *

** 바로 앞에 있는 문자가 0부터 무한대로 반복될 수 있다는 것을 의미.

ca*t

위 정규식은 c + a(0번이상 반복) + t를 의미하고 ct, cat, caaaaat 모두 매치된다.

2-6) 반복 +

*와는 달리 ++ 바로 앞에 있는 문자가 1부터 무한대로 반복될 수 있다는 것을 의미한다.
따라서 ca+tct와 매치되지 않는다.

2-7) 반복 {m,n}

{}는 원하는 반복횟수를 지정하고 싶을 때 사용한다.

    1. {m} : 반드시 m번 반복
      ca{2}t : c + a(2번 반드시 반복) + t
    1. {m,n} : m~n회 반복
      ca{2, 5}t : c + a(2~5회 반복) + t
    1. {m,}, {,n} : m회 이상 반복, n회 이하 반복

2-7) ?

{0, 1}과 같은 의미를 지닌다.
문자가 있거나 없거나 둘 다 매치된다.

ab?c : a + b(있어도 그만 없어도 그만) + c

3. 예시

주민등록번호 정규표현식

/^\d{2}[0-1]\d{1}[0-3]\d{1}\-[1-4]\d{6}$/

이메일 정규표현식

^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

비밀번호 정규표현식

^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$

profile
비진

0개의 댓글