사용자 도구

사이트 도구


research:pythonregularexpression

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
research:pythonregularexpression [2014/01/09 04:53] – 새로 만듦 changwooresearch:pythonregularexpression [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 ====== 파이썬 정규식 학습하기 ======= ====== 파이썬 정규식 학습하기 =======
-파이썬에서 정규식 부분이 매우 강력해서 자주 쓰고는 있지만, 다양한 정규 표현식에 대해서는 그다지 익히지 못해 고급 표현에는 조금 약하다. 이번 문서에서 파이썬 re 모듈의 문서를 완전히 정리하도록 하자.+파이썬에서 정규식 부분이 매우 강력해서 자주 쓰고는 있지만, 다양한 정규 표현식에 대해서는 그다지 익히지 못해 고급 표현에는 조금 약하다. 이번 문서에서 [[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으로 접근 가능하다. 표현식에서 name은 1회만 나와야 한다. 패턴 자체를 재사용할 수 있다.
 +      * 예를 들어 '''(?P<quote>['"]).*?(?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를 매칭한다.
 +    * (?<!...) ...안의 문자열로 시작하지 않으면 매칭한다.
 +    * (?(id/name)yes-pattern|no-pattern) id/name이 있으면 yes-pattern을, 아니면 no-pattern을 평가한다. no-option은 선택적이다.
 +  * \숫자 그룹 번호를 참조할 때 사용한다.
 +  * \A 문자열의 처음과 매칭된다.
 +  * \b 빈문자와 매칭되나 단어의 앞뒤에만 적용된다. 예를 들어 r'\bfoo\b'를 쓰면 'foo', 'foo.', 'bar foo baz'와는 매칭되나, 'foobar'와는 매칭되지 않는다.
 +  * \B \b의 반대 케이스로 빈 문자와 매칭되지만, 단어의 앞뒤에는 적용되지 않는다. 예를 들어 r'py\B'는 'python', 'py3', 'py2'와는 매칭되나, 'py', 'py.', 'py!'와는 매칭되지 않는다. 
 +  * \d 숫자와 매칭된다. [0-9]와 같다
 +  * \D 숫자가 아닌 것들과 매칭된다. [^0-9]와 같다.
 +  * \s 공백 문자들. [ \t\n\r\f\v]
 +  * \S 공백 문자가 아닌 문자들.
 +  * \w 알파벳, 숫자, 언더스코어들 말한다. LOCALE, UNICODE가 사용되면 알파벳은 영향을 받는다.
 +  * \W non-alphanumeirc
 +  * \Z 문자열의 끝.
 +
 +===== 참고 사이트 =====
 +* http://regexpal.com/ 정규식 연습. 일부 지원되지 않는 표현도 있다.
 +       
research/pythonregularexpression.1389243217.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki