Regular Expression(정규표현식)
정규표현식: 특정한 규칙을 가진 <문자열>의 패턴 표현에 사용하는 형식 언어.
-
메타문자
메타 문자: 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자
. ^ & * + ? {} [] \ | () -
문자 클래스: []
[]: 내부 문자 중 한 개의 문자와 매치를 뜻함.[abc]:"a", "before"와 매치, 하나도 포함하지 않는 "depth"는 매치 X.[-]: from-to의 역할을 함.[a-zA-Z]는 알파벳 전체, [0-9]는 숫자까지.[^]: not이라는 뜻.[^0-9]: 숫자가 아닌 문자만 매치.-
자주 사용하는 문자 클래스
\d:[0-9]. 숫자와 매치.\D:[^0-9].숫자가 아닌 문자와 매치.\s:[\t\n\r\f\v]. 공백문자(white space)와 매치.\S:[^ \t\n\r\f\v]. 공백문자가 아닌 문자와 매치.\w:[a-zA-Z0-9_]. 문자+숫자와 매치\W:[^a-zA-Z0-9_]. 문자+숫자가 아닌 문자와 매치
-
-
-
Dot: .
.: 두 문자 사이 하나 이상의 어떤 문자가 하나 들어가도 매치.줄바꿈 문자 \n을 제외한 모든 문자와 매치됨.
a.b: "a + 문자하나 + b"
-
반복: *, +, {}, 그리고 ?
*: 바로 앞 문자가 0부터 무한대(약 2억)로 반복될 수 있음.ca*t: ct, cat,caaaaaaaaaaaaat와도 매치 가능.+: 바로 앞 문자가 1번 이상 반복될 수 있음.ca+t: cat와 caaaaaat는 가능하지만 ct 문자는 매치 불가능.{}: 바로 앞 문자의 반복 수를 고정.{m,n}으로 구간 설정 가능.ca{2}t는 caat만 매치,ca{2,5}t는 a가 2~5회 반복 되는 경우 매치.?: 앞 문자가 있어도, 없어도 된다는 뜻.{0, 1}과 같은 역할.
-
Or: |
a|b: a 또는 b라는 의미.
-
문자열의 처음: ^
^hi: 지정 문자열이 처음에 온 경우에만 매치.
-
문자열의 끝: $
bye$: 지정 문자열로 끝나는 경우에만 매치.
-
\A, \Z, \b, \B
\A: ^와 동일하지만 MULTILINE 옵션 무시, 전체 문자열의 처음만 매치.\Z: $와 동일하지만 MULTILINE 옵션 무시, 전체 문자열의 끝과만 매치.\b: 단어 구분자, 보통 whitespace에 의해 구분./bclass/b: whitespace로 구분된 class 단어만 매치.백스페이스로 이해할 수 있으니 raw string 표시
r''로 표현.\B: \b와 반대로, whitespace로 구분되지 않은 단어인 경우만 매치.
-
Grouping: ()
(): 그룹을 만들어주는 메타 문자.m.group(n): n번째 그룹에 해당되는 문자열 뽑아냄.n=0인 경우, 매치된 전체 문자열.
\2: 그루핑한 문자열을 재참조하는 메타문자로, n번째 그룹을 가리킴.(?P<name>\w+): 그룹에 이름을 지어줌.참조:
m.group('name')재참조:
(?P=name)
-
re: 정규식을 이용한 문자열 검색
re.split(' ', text): text 문자열을공백 기준으로 분리하여 리스트로 반환.re.compile('[a-z]+'): 정규 표현식을 컴파일 함.컴파일된 패턴 객체 p를 사용하여 작업 수행.
re.match('python'): 문자열의 처음부터 정규식과 매치되는지 조사.맨 앞이 매치되지 않으면 None. 중간에 끊기면 중간까지.
re.search(): 문자열 전체를 검색하여 정규식과 매치되는지 조사.match와 같지만, 맨 앞이 매치되지 않아도 다음 문자열을 계속 검색함.
re.findall(): 정규식과 매치되는 모든 문자열을 리스트로 돌려줌.re.finditer(): 정규식과 매치되는 모든 문자열을 반복가능한 객체로 돌려줌.findall과 동일하지만, 반복 가능한 객체를 돌려줌
for r in result: print(r)re.sub('[]', ' ', text): text 문자열에서 표현식에 맞는 내용을 빈칸으로 대체.축약하기: re.match(‘[a-z]+', ‘python')
한 번 만든 패턴 객체를 여러번 사용할때 편리함.
-
match 객체의 메서드
m.group(): 매치된 문자열을 돌려줌.m.start(): 매치된 문자열의 시작 위치를 돌려줌.search 메서드를 사용하면 값이 0과 다르게 나올 것.
m.end(): 매치된 문자열의 끝 위치를 돌려줌.m.span(): 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 돌려줌.
-
컴파일 옵션
re.compile('a.b', re.S)와 같은 방식으로 사용함.re.DOTALL: dot(.)이 줄바꿈 문자를 포함한 모든 문자와 매치할 수 있게 함.==
re.Sre.IGNORECASE: 대소문자와 관계없이 매치할 수 있게 함.==
re.Ire.MULTILINE: 여러 줄과 매치 가능하게 함. ^와 $ 사용과 관계 있는 옵션.^와 $ 메타 문자를 문자열의 각 줄마다 적용해주는 것.
==
re.Mre.VERBOSE==re.X
전방 탐색, sub 메서드 등등 많이 있음…