Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기

IT/Python

[re] 정규식 기초 [Python]

728x90

정규식 패턴

패턴 설명 예제
 ^ 이 패턴으로 시작해야 함 ^abc : abc로 시작해야 함 (abcd, abc12 등)
 $ 이 패턴으로 종료되어야 함 xyz$ : xyz로 종료되어야 함 (123xyz, strxyz 등)
 [문자들] 문자들 중에 하나이어야 함. 가능한 문자들의 집합을 정의함. [Pp]ython : "Python" 혹은 "python"
 [^문자들] [문자들]의 반대로 피해야할 문자들의 집합을 정의함. [^aeiou] : 소문자 모음이 아닌 문자들
 | 두 패턴 중 하나이어야 함 (OR 기능) a | b : a 또는 b 이어야 함
 ? 앞 패턴이 없거나 하나이어야 함 (Optional 패턴을 정의할 때 사용) \d? : 숫자가 하나 있거나 없어야 함 
 + 앞 패턴이 하나 이상이어야 함 \d+ : 숫자가 하나 이상이어야 함
 * 앞 패턴이 0개 이상이어야 함 \d* : 숫자가 없거나 하나 이상이어야 함 
 패턴{n} 앞 패턴이 n번 반복해서 나타나는 경우 \d{3} : 숫자가 3개 있어야 함
 패턴{n, m} 앞 패턴이 최소 n번, 최대 m 번 반복해서 나타나는 경우 (n 또는 m 은 생략 가능) \d{3,5} : 숫자가 3개, 4개 혹은 5개 있어야 함
 \d 숫자 0 ~ 9 \d\d\d : 0 ~ 9 범위의 숫자가 3개를 의미 (123, 000 등)
 \w 문자를 의미 \w\w\w : 문자가 3개를 의미 (xyz, ABC 등)
 \s 화이트 스페이스를 의미하는데, [\t\n\r\f] 와 동일 \s\s : 화이트 스페이스 문자 2개 의미 (\r\n, \t\t 등)
 . 뉴라인(\n) 을 제외한 모든 문자를 의미 .{3} : 문자 3개 (F15, 0x0 등)

출처: http://pythonstudy.xyz/python/article/401-%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D-Regex

 

 

메타 문자

\ ^ $ . | [ ]  * + ? { }: 앞에 역슬래시 \를 붙여 이스케이프 해주면 된다.

 

이스케이프 문자

(대문자를 쓰면 해당 문자 집합을 제외하는 ^ 문자와 동일하다. / 백 스페이스는 반드시 [\b]를 입력해야 한다.)

  • \b: 문자와 공백 사이를 의미한다.
  • \c: 제어 문자를 의미한다.
  • \d: 숫자에 해당하는 유니코드에 대응. [0-9]와 달리 아랍 문자, 페르시아 문자 등 다양한 숫자를 포괄한다.
  • \f: 폼 피드
  • \n: 개행 문자
  • \s: 공백 문자
  • \t: 탭 문자
  • \v: 수직 탭
  • \w: 단어 영문자+숫자+_(밑줄) [0-9a-zA-Z_]
  • \x: 16진수 값
  • \0: 8진수 값

re모듈

점프 투 파이썬 -정규표현식

 

파이썬은 정규 표현식을 지원하기 위해 re(regular expression) 모듈을 제공한다.

>>> import re
>>> p = re.compile('ab*')

re.compile을 사용하여 정규 표현식(위 예에서는 ab*)을 컴파일한다. re.compile의 리턴값을 객체 p(컴파일된 패턴 객체)에 할당해 그 이후의 작업을 수행할 것이다.

 

  • 정규식을 컴파일할 때 특정 옵션을 주는 것도 가능한데, 이에 대해서는 뒤에서 자세히 살펴본다.
  • 패턴이란 정규식을 컴파일한 결과이다.

컴파일된 패턴 객체가 제공하는 4가지 메서드

Method 목적
match 문자열의 처음부터 정규식과 매치되는지 조사한다.
search 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.
findall 정규식과 매치되는 모든 문자열(substring) 리스트로 리턴한다.
finditer 정규식과 매치되는 모든 문자열(substring) 반복 가능한 객체로 리턴한다.

 

match 객체의 메서드

method 목적
group 매치된 문자열을 리턴한다.
start 매치된 문자열의 시작 위치를 리턴한다.
end 매치된 문자열의 위치를 리턴한다.
span 매치된 문자열의 (시작, 끝) 해당하는 튜플을 리턴한다.

 

+ re.sub("패턴", "변경할 문자", "원본")