위키북스 박응용 저 "점프 투 파이썬" 책을 읽고 정리한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
정규식 컴파일
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“\”
를 쓰면 얘가 하나로 자동변환하지 않고 그냥 냅두기 때문에 문자로써의\
을 사용할 수 있다