정규표현식 (regular Expression)

jplendor·2022년 6월 18일
0

정규표현식이 왜 필요?

복잡한 문자열을 간단하게 처리할 수 있다!

메타 문자

  • 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자
  • . ^ $ + ? { } [ ] \ | ( )
    • 문자 클래스 [ ] : [ ] 사이의 문자들과 매치
      • [abc] : a, b, c
      • [a-c] : a부터 c까지 (= a, b, c)
      • [a-zA-Z] : 알파벳 모두
      • [0-9] = [\d] : 숫자
      • [^0-9] = [\D] : 숫자가 아닌 것
      • [\s] = [ \t\n\r\f\v] : whitespace 문자 (공백을 표현하는 문자들)
      • [\S] = [^ \t\n\r\f\v] : whitespace 문자가 아닌 것
      • [a-zA-Z0-9_] = [/w] : 숫자 + 문자
      • [^a-zA-Z0-9_] = [/W] : 숫자 + 문자가 아닌 문자
    • Dot(.) : 줄바꿈 문자인 \n을 제외한 모든 문자
      • [a.b] : a + 모든 문자 + b => 즉, azb, a5b는 매치, abc는 매치X
    • 반복
      * : * 바로 앞에 있는 문자가 0~무한대 반복될 수 있다.
      - [to*p] : tp, top, toooooop
      + : * 바로 앞에 있는 문자가 1~무한대 반복될 수 있다. (최소 1번!)
      {m,n} : 반복 횟수 범위 설정
      - ca{2,3}t : caat, {caaat}
      ? : 있어도 되고 없어도 되고 = {0, 1}과 같은 의미
      - ab?c : ac, abc

패턴

  • 정규표현식을 컴파일하여 패턴 객체를 반환한다.
import re
p = re.compile('ca{2,5}t')

문자열 검색하기 (패턴 객체의 메서드)

  • 컴파일된 패턴 객체를 이용한다.
Method목적
match()문자열의 처음부터 정규식과 매치되는지 조사한다. (매치 => match 객체, 매치 X => None 반환)
search()문자열 전체를 검색하여 정규식과 매치되는지 조사한다. (매치 => match 객체, 매치 X => None 반환)
findall()정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.
finditer()정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체(각 요소는 match 객체)로 돌려준다.
  • match()

  • search()

  • findall()

  • finditer()

반환된 match 객체 이용하기 (match 객체의 메서드)

Method목적
group()매치된 문자열을 돌려준다.
start()매치된 문자열의 시작 위치를 돌려준다.
end()매치된 문자열의 끝 위치를 돌려준다.
span()매치된 문자열의 (시작, 끝)에 해당하는 튜플을 돌려준다.

모듈 단위로 수행하기

  • 두번의 과정을
    정규식 -> (compile 메서드로) 패턴 객체 얻기 -> (검색 메서드로) match 객체 얻기
p = re.compile("[a-z]+")
m = p.match("regex")
  • 한번에 축약해서 쓸 수 있다!
m = re.match("[a-z]+", "regex")

컴파일 옵션

  • 정규식을 컴파일할 때 옵션을 추가할 수 있는데, 이건 필요할 때마다 찾아보는 걸로!

📕 참고 자료: https://wikidocs.net/4308 👍👍👍

profile
만들기는 재밌어!

0개의 댓글