사용자 도구

사이트 도구


research:pythonregularexpression

파이썬 정규식 학습하기

파이썬에서 정규식 부분이 매우 강력해서 자주 쓰고는 있지만, 다양한 정규 표현식에 대해서는 그다지 익히지 못해 고급 표현에는 조금 약하다. 이번 문서에서 파이썬 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.txt · 마지막으로 수정됨: 2014/10/09 21:24 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki