====== 파이썬 정규식 학습하기 ======= 파이썬에서 정규식 부분이 매우 강력해서 자주 쓰고는 있지만, 다양한 정규 표현식에 대해서는 그다지 익히지 못해 고급 표현에는 조금 약하다. 이번 문서에서 [[http://docs.python.org/2/library/re.html|파이썬 re 모듈의 문서]]를 완전히 정리하도록 하자. ===== 기본 기호 ===== * '.'(닷) newline 문자를 제외한 어떤 문자. DOTALL 모드를 사용하면 newline도 포함한다. * '^' (캐럿) 문자열의 시작. MULTILINE 모드면 newline 바로 다음도 인식한다. * '$' 문자열의 마지막. 마찬가지로 MULTILINE 모드이면 newline바로 전도 인식한다. * '*' 어떤 문자든 몇 번이든 매치되거나, 아예 안되어도 상관없다. * '+' 어떤 문자든 1회이상 매치되어야 한다. * '?' 매치가 0회, 1회 * *?, +?, ?? '*', '+', '?'는 모두 매치될 수 있을 만큼 매치한다. 이렇게 사용하면 가장 작은 매칭을 이용하게 된다. * {m} 정확히 m번 반복하는 것만 매칭한다. * {m, n} m회 이상 n회 이하의 반복을 매칭한다. n이 생략되면 상한선을 두지 않는다는 뜻이다. n을 생략하면 하한선을 두지 않으므로 0회 반복되어도 무방하다는 뜻이다. * {m,n}? m회 이상 n회 이하의 반복이기는 하지만 가장 작은 매칭을 사용한다. 예를 들어 'aaaaaa' a가 6번 반복되는 문자열에서 a{3,5}를 찾으면 5개의 a를 찾을 것이고, a{3,5}?는 3개의 a를 찾을 것이다. * \ 이스케이프 문자 * [] 이 안에 들어가는 문자 중 하나와 매칭. * '-' 기호를 이용해 문자열 범위를 지정 가능. [0-9], [a-z] * (, +, * 같은 기호들이 의미를 잃고 보통 문자열로 취급됨 * \w, \S 같은 문자들도 사용 가능. * [^ 는 이 문자열 목록에 있지 않은 문자들만 매칭 * | A|B A여도 되고, B여도 되고. 이 때 A, B는 임의 길이의 스트링이다. * ( ) 그룹을 만들 때 사용한다. * (? ) 그룹의 확장 표현이다. * (?iLmsux) 해당 부분에만 옵션을 적용할 때 사용한다. 옵션은 다음과 같다. * i: ignore case * L: locale-dependant * m: multi-line * s: dot matches all * u: unicode dependant * x: verbose * (?P...) 그룹을 name으로 접근 가능하다. 표현식에서 name은 1회만 나와야 한다. 패턴 자체를 재사용할 수 있다. * 예를 들어 '''(?P['"]).*?(?P=quote)'''라는 표현에서, * 패턴 자체를 참조할 때, (?P=quote) 혹은 \1 로 참조 되며, * 매칭된 문자열에서는 m.group('quote')로 참조 가능하다. * (?P=name) 이미 name으로 지정된 그룹을 참조할 때 사용한다. * (?#....) 주석이다. * (?=....) lookahead이다. 'Issac (?=Assimov)'란 표현을 사용하면 'Issac Assimov'에서 Issac만을 찾아낸다. 그러나 'Issac Newton'은 Newton이란 문자열은 Assimov랑 다르므로 매칭되지 않는다. * (?!....) (?=...)와는 반대로 매칭되지 않는 것만을 찾아낸다. * %%(?<=...)%% ...안의 문자열로 시작하면 매칭한다. ''(?<=abc)def''라는 표현에서 'abcdef'를 찾으면 def를 매칭한다. * (?