위키북스 박응용 저 "점프 투 파이썬" 책을 읽고 정리한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

정규식 컴파일

ptrn = re.compile("정규식")
  • re 모듈의 compile() 메소드는 정규식을 컴파일해 패턴객체로 반환한다
  • 당연히 import re 로 모듈을 가져와야 한다

매칭된부분 문자열 리스트로 받기

str_list = ptrn.findall("문자열")
  • 문자열을 정규식으로 조사해 매칭되는 모든 부분을 문자열 리스트로 반환한다

컴파일 옵션

re.compile("정규식", 옵션)
  • 정규식 뒤에 컴파일 옵션을 같이 넣어줄 수 있다
    • re.DOTALL, re.S : .기호가 대체할 수 있도록 한다
    • re.IGNORECASE, re.I : 대소문자를 구분하지 않는다
    • re.MULTILINE, re.M : match()^는 문자열의 맨 앞을 조사하는데, 이 옵션을 넣으면 줄 바꿈한 부분도 조사한다
    • re.VERBOSE. re.X : 정규식에 whitespace와 주석을 달 수 있게 해준다.
      • 정규식이 길어지면 읽기가 힘든데, 이때 re.VERBOSE 옵션을 주어 주석으로 설명을 달면 훨씬 보기 편하다

매칭된부분 문자열 바꾸기

str = ptrn.sub("replace", "target")
str = ptrn.sub("replace", "target", count = 1)
str = ptrn.sub(func_object, "target")
  • “target”을 패턴으로 조사해 매칭되는 모든 부분을 “replace”로 바꿔치기하여 문자열로 반환한다
  • 생략가능한 매개변수 count를 설정하면 바꾸는 횟수를 정할 수 있다.
    • count = 1이면 제일 먼저 매칭된 부분만 바꾸고, count = 2이면 첫번째와 두번째로 매칭된 부분을 바꾸는 식이다
  • “replace”대신 함수각체를 넣을 수도 있다. 그럼 매칭된 부분이 함수 처리 결과로 바뀌게 된다
  • sub대신 subn을 이용하면 (“결과 문자열”, 바꾼 횟수:int) 이렇게 튜플로 반환한다

sub 메소드 참조구문

  • sub“replace”에 사용하면 그룹을 참조할 수 있다
ptrn = re.compile("(?P\w+)\s+(?P\w+)")
ptrn.sub("\g \g", "abc def")
  • 이렇게 해주면 “def abc”가 반환된다

패턴객체 -> 매치객체

mtch = ptrn.match("문자열")
mtch = ptrn.search("문자열")
mtch_gen = ptrn.finditer("문자열")
  • 패턴으로 문자열을 조사해 매칭되는부분을 매치객체로 반환한다
  • match() : 문자열의 맨 앞만 조사해 매치된다면 반환한다
  • search() : 문자열 전체를 조사해 제일 먼저 매칭되는 놈을 반환한다
  • finditer() : 문자열 전체를 조사해 매칭되는 모든놈을 매치객체 제네레이터로 반환한다

컴파일 안하고 패턴객체 메소드 사용하기

re.ptrn_method("정규식", "문자열")
  • 저렇게 re모듈에서 패턴객체 안거치고 match, search같은 패턴객체의 메소드를 사용할 수 있다
  • 여러번 사용할 정규식이라면 패턴객체를 만들어놓고 사용하는게 편리하지만 한번만 사용할 정규식이라면 re모듈선에서 바로 처리해 주는 것이 깔끔하다

매칭된놈 매치객체에서 문자열로 받기

mtch.group()
mtch.group(숫자)
  • 인자를 안넣거나 0을 넣으면 매치된놈을 문자열로 반환한다
  • 숫자를 인자로 넣으면 그 숫자에 해당하는 번째의 그룹을 문자열로 반환한

매칭된 부분 인덱스 매치객체에서 가져오기

mtch.start()
mtch.end()
mtch.span()
  • start() : 매칭된부분 첫 인덱스를 반환한다
  • end() : 매칭된부분 끝 인덱스+1를 반환한다
  • span() : 매칭된부분 (첫 인덱스, 끝 인덱스+1) 를 튜플로 반환한다

백슬레시 (\) 매칭법

  • 파이썬은 \ 를 자동으로 변환한다. 따라서 메타기호가 아닌 문자로써의 매칭하기 위해 정규식에 \ 이렇게 써봤자 바뀌어서 메타기호로 인식하게 된다
  • 그렇다고 \ 를 표현하기 위해 \\\\이렇게 4개를 쓸 수도 없는 일이다. 이때 Raw String 이라는 것을 이용한다
  • 문자열 앞에 r 을 붙여주면 Raw String이 된다. r“\”를 쓰면 얘가 하나로 자동변환하지 않고 그냥 냅두기 때문에 문자로써의 \ 을 사용할 수 있다