본문 바로가기
Python

[Python] 정규표현식

by Angie 2022. 4. 11.

1. 정규표현식

1. 메타문자

[ ]

문자 클래스. [ ] 사이의 문자들과 매치

  • e.g. [abc] 가 주어진다면 a , b , c 한개의 문자만 있으면 매치
    • beforeb를 포함하므로 매치
  • [a-zA-Z] : 알파벳 모두
  • ^ : not
    • [^0-9] : 숫자가 아닌 문자만 매치
  • \d : 숫자 = [0-9]
  • \D : 숫자가 아닌 것 = [^0-9]
  • \s: whitespace = [ \t\n\r\f\v]
  • \S : whitespace 아닌 것 = [^ \t\n\r\f\v]
  • \w : 문자+숫자 = [a-zA-Z0-9_]
  • \W : 문자+숫자가 아닌 것 = [^a-zA-Z0-9_]

Dot(.)

\n 를 제외한 모든 문자와 매치

  • a.b : a + 모든문자 + b
    • aab(매치), a0b(매치), abc(매치X)
  • a[.]b : a + . + b
    • a.b(매치), aab(매치X)

*

* 앞 문자 무한번 반복가능

  • ca*t
    • ct(매치, 0번 반복), cat(매치, 1번 반복), caaat(매치, 3번 반복)

+

+ 앞 문자 1번 이상 반복

  • ca+t
    • ct(매치X, 0번 반복), cat(매치, 1번 반복), caaat(매치, 3번 반복)

{}

반복 횟수 고정

  • {m}: {m}앞 문자가 m번 반복
  • {m, n}: m~n회 반복
  • {,n}: n 이하 반복

?

0번 또는 1번 반복 = {0, 1}


2. re 모듈

import re

match()

문자열의 처음부터 정규식과 매치되는지 조사 (매치되지 않으면 None 반환)

  • group(): 매치된 문자열 반환
  • start(): 매치된 문자열의 시작 위치 반환
  • end(): 매치된 문자열의 끝 위치 반환
  • span(): 매치된 문자열의 (시작, 끝)에 해당하는 튜플 반환
>>> import re

>>> p = re.compile('[a-z]+')
>>> m = p.match("python")

>>> print(m)
<re.Match object; span=(0, 6), match='python'>
>>> import re

>>> m = re.match('[a-z]+', "python")

>>> print(m)
<re.Match object; span=(0, 6), match='python'>
>>> m.group()
'python'
>>> m.start()
0
>>> m.end()
6
>>> m.span()
(0, 6)

search()

문자열 전체를 검색하여 정규식과 매치되는지 조사 (매치되지 않으면 None 반환)

>>> m = re.search('[a-z]+', "python") 
>>> print(m)
<re.Match object; span=(0, 6), match='python'>

findall()

정규식과 매치되는 모든 문자열을 리스트로 반환

>>> result = p.findall("life is too short")
>>> print(result)
['life', 'is', 'too', 'short']

finditer()

정규식과 매치되는 모든 문자열을 반복 가능한 객체로 반환

>>> result = p.finditer("life is too short")
>>> print(result)
<callable_iterator object at 0x01F5E390>
>>> for r in result: print(r)
...
<re.Match object; span=(0, 4), match='life'>
<re.Match object; span=(5, 7), match='is'>
<re.Match object; span=(8, 11), match='too'>
<re.Match object; span=(12, 17), match='short'>

자주 사용하는 함수

문자열 바꾸기: sub

references

'Python' 카테고리의 다른 글

[NLP] 자연어 전처리  (0) 2022.04.11

댓글