ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 정규 표현식(Regular Expressions)
    파이썬 2020. 7. 3. 01:50

    1. 정규 표현식이란?

    정규표현식이란 복잡한 문자열을 처리할 때 사용하는 기법. 파이썬 뿐 아니라 문자열을 처리하는 모든 곳에서 사용한다.

    2. 정규 표현식의 필요성

    정규 표현식을 이용하면 직관적이고 간편한 코드를 짤 수 있고 복잡한 문자열의 규칙 등을 쉽게 치환할 수 있다.

    3. 정규 표현식의 기초, 메타문자

    ※ 메타 문자란 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자를 말한다.

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

    4. 메타문자

    (1) 문자 클래스 [ ]

    "[ ] 사이의 문자들과 매치"란 뜻. 메타 문자 [ ] 안에는 어떤 문자도 들어갈 수 있다.

    [ ] 안에 하이픈( - )을 사용하면 두 문자 사이의 범위(from - to)를 의미한다.

    ex) [a-zA-Z] : 알파벳 소문자, 대문자 모두 대응

    ex) [0-9] : 숫자

     

    자주쓰는 문자 클래스

    \d

    숫자와 매치, [0-9]와 동일한 표현식

    \D

    숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식

    \s

    whitespace 문자와 매치. 공백문자를 포함한

    [  \t, \n, \r, \f, \v]와 동일한 표현식.

    \S

    whitespace 문자가 아닌 것과 매치
    [ ^ \t, \n, \r, \f, \v]와 동일한 표현식

    \w

    문자+숫자()문자+숫자(alphanumeric)와 매치.

    [a-zA-Z0-9_]와 동일한 표현식.

    \W

    문자+숫자(alphanumeric)가 아닌 문자와 매치.

    [^a-zA-Z0-9_]와 동일한 표현식

     

    (2) Dot ( . )

    Dot(.)은 줄바꿈인 \n을 제외하고 모든 문자와 매칭된다. 일종의 조커 역할.

    ex) a.b → "a+ 모든문자 +b"의 뜻. 즉 a와 b 사이에 어떤 문자가 들어가도 모두 매치됨.

     

    (3) 반복 ( * )

    * 표시 앞에 있는 문자가 무한대로 반복될 수 있다는 의미. 앞의 문자가 0번부터 무한대로 반복된다고 보면 된다.

    ex)

    ca*t

    ct

    매칭됨

    ca*t

    cat

    매칭됨

    ca*t

    caaaat

    매칭됨

     

    (4) 반복 ( + )

    *과 마찬가지로 +도 앞의 문자가 무한대로 반복될 수 있다는 의미다.

    다만 *과 달리 앞의 문자가 한 번은 반복되어야 한다. 즉 최소 1번의 반복은 진행되어야 한다.

    ex)

    ca*t

    ct

    매칭안됨

    ca*t

    cat

    매칭됨

    ca*t

    caaat

    매칭됨

     

    (5) 반복 ( {m,n}, ? )

    { }를 이용하면 문자, 숫자의 반복 횟수를 고정할 수 있다. {m,n}을 쓰면 최소 m번만큼, 최대 n번까지 반복할 수 있게 반복횟수 고정이 가능하다.

     

    이렇게도 응용이 가능하다. {m, }는 최소 m번부터 무한대로 반복가능, {, n}는 0부터 시작해서 n번까지 반복.

     

    ?는 {0, 1}과 같은 뜻으로 최소 0번 반복부터 1번까지 반복 가능하다는 뜻

     

    ex)

    ca{2,5}t

    cat

    매칭안됨

    ca{2,5}t

    caat

    매칭됨

    ca{2,5}t

    caaaaat

    매칭됨

    ca?t

    ct

    매칭됨

    ca?t

    cat

    매칭됨

    ※ {1, }은 +(최소 1회부터 무한 반복), {0, }는 *(0회부터 무한반복)와 동일하다.

     

    (6) I

    메타문자 I는 or과 동일한 의미로 사용된다.

    ex) A|B라는 정규식이 있으면 A 또는 B라는 의미

     

    (7) ^

    ^ 메타 문자가 붙으면 맨 처음에 ^+(문자 혹은 숫자)로 와야 매칭이 된다. 컴파일 옵션 re.MULTILINE을 사용할 땐 여러 줄의 문자열일 때 각 줄의 처음과 일치하게 된다.

    >>> import re #re를 임포트해줘야 한다.
    >>> print(re.search('^Life', 'Life is too short'))
    <re.Match object; span=(0, 4), match='Life'>

     

    (8) $

    $ 메타문자는 ^와 반대의 경우다. 즉 $는 문장 맨뒤에 와서 (문자 혹 숫자)+$가 되어야 매칭이 된다.

    >>> import re
    >>> print(re.search('short$', 'Life is too short'))
    <re.Match object; span=(12, 17), match='short'>

     

    (9) \A

    \A는 ^와 똑같은 의미지만, ^와 달리 re.MULTILINE 옵션을 사용해도 줄과 상관없이 전체 문자열의 처음하고만 매치된다.

     

    (10) \Z

    \Z는  $과 같이 문자열의 끝과 매치된다. 그러나 이것도 \A와 동일하게 re.MULTILINE 옵션을 사용해도 줄과 상관없이 전체 문자열의 끝하고만 매치된다.

     

    (11) \b

    \b는 단어 구분자(Word boundary)이다. 보통 단어는 whitespace에 의해 구분된다. \b가 있을 경우 해당 문자 위치는 공백으로 처리되어야 매칭이 된다.

    >>> import re
    >>> p = re.compile(r'\bclass\b')
    >>> print(p.search('no class at all'))
    <re.Match object; span=(3, 8), match='class'>

     

    (11) \B

    \B는 \b와는 반대로 해당 문자 위치에 공백이 없어야 매칭된다. 

    >>> import re
    >>> p = re.compile(r'\Bclass\B')
    >>> print(p.search('the declassified algorithm'))
    <re.Match object; span=(6, 11), match='class'>

     

Designed by Tistory.