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