python은 re를 이용하며 이는 Perl 스타일의 regular-expression이다.

re모듈은 처리를 수행하다가 예외가 발생하면 re.error이 raise된다.

기본 패턴

a, X, 9, <

- 일반적인 캐릭터로 그 자체로 매칭이 되는지 검사한다.

. (a period)

- 뉴라인 ‘\n’을 제외한 한 문자 캐릭터와 매치된다.

\w

- “word”에 해당하는 캐릭터를 매치한다. letter 혹은, digit혹은 underbar등이 해당된다.

- 이는 [a-zA-Z0-9_] 에 해당한다.

\W

- word가 아닌것에 대해서 매치한다.

\b

- 단어와 비 단어 사이의 영역이다.

\s

- 단일 공백 문자와 매치하는지 검사한다. 공백, 뉴라인, 리턴, 탭 이 속한다.

\S

- 공백문자가 아닌것과 매치하는지 검사한다.

\t, \n, \r

- 탭, 뉴라인, 리턴 에 해당한다.

\d

- decimal digit [0-9]를 의미한다.

^

- 해당 문자로 시작되는지 검사한다.

$

- 해당 문자로 끝이 나는지 검사한다.

\

- 특수 기능을 제거하여 매치 검사를 한다.

정규식 컴파일 플래그

ASCII, A

- 몇가지 이스케이프 \w, \b\, \s, \d 와 같은특수 처리 문자를 단순 문자로 인식한다.

DOTALL, S

- . 어떤 캐릭터 하나에 대한 매치를 만든다 new line 포함

IGNORECASE, I

- 케이스에 상관없이 처리되도록 한다.

LOCALE, L

- 로케일 인식한 매치를 한다.

MULTILINE, M

- 멀티라인 매칭을 수행하도록 한다. 이는 ^와 $에 영향을준다.

VERBOSE, X (확장용)

- verbose RE들을 이용하도록 한다. 이는 더 이하하기 쉽고 명확하게 해준다.

매치함수

매치 문법 :

re.match(pattern, string, flags=0)

- pattern : 정규 표현식

- string : 스트링으로 매치될 대상이다.

- flags : 서로다른 플래그들을 조합하기 위해서 OR(|) 비트연산을 이용할 수 있다.

re.match는 매치가 성공한경우 match객체를 반환한다. None인경우 실패한경우이다.

매치 그룹화

group(num=0)

- 이 메소드는 전체 매치를 반환한다. (혹은 특정 하위 그룹의 수를 반환한다.)

groups()

- 이 메소드는 모든 매치 서브 그룹을 반환한다.

search Function

RE패턴의 첫번째로 발생되는 검색결과를 반환한다.

문법 :

re.search(pattern, string, flags=0)

- pattern : 정규표현식

- string : 스트링으로, 검사를 수행할 대상 문자열

- flags : 서로다른 플래그를 bit OR연산 (|)을 이용할 수 있다.

Search and Replace

형식 :

re.sub(pattern, repl, string, max=0)

re메소드중에서 가장 중요한 것으로 대응 문자로 교체하는 작업을 수행한다.

Regular Expression Modifiers : Option Flags

정규식은 옵션 모디파이어를 제공한다. 이는 다양한 관점에서 매핑을 수행할 수 있도록 한다.

이는 OR연산을 통해서 해당 옵션 플래그를 복합적으로 이용할 수 있다.

re.I

- 대/소문자를 가리지 않고 매핑한다.

re.L

- 현재 로케일로 인터프리터 한다. 이 인터프리터는 알파벳 그룹에 영향을 준다. (\w와 \W),

그리고 (\b와 \B)와 함께 바운더리 내용과 같이 작업한다.

re.M

- $가 라인의 끝을 매칭하도록 하고, ^는 라인의 시작을 의미하게 한다.

re.S

- dot 표현식을 다른 어떤 캐릭터와 매핑되도록 설정한다. 뉴라인 포함.

re.U

- 유니코드 캐릭터를 인터프리터 한다. 이 플래그는 \w, \W, \b, \B 의 행위에 영향을 준다.

re.X

- “cuter” 정규식 문법을 허용한다. 이것은 공백을 무시하고, 이스케이프되지 않은 # 을 처리한다.

정규 표현식 패턴.

^

- 라인의 시작을 매칭한다.

$

- 라인의 종료를 매칭한다.

.

- 어떠한 하나의 캐릭터에 매칭하는지 확인한다. 뉴라인 캐릭터를 제외, m옵션을 이용하면 뉴라인도 허용된다.

[…]

- 괄호 내이 단일 캐릭터와 매칭되는지 검사한다.

[^…]

- 괄호 내에 단일 캐릭터와 매칭되지 않은지 검사한다.

re*

- re이후로 0 이상 발생한 내용을 확인한다.

re+

- re이후로 한번 이상 발생한 내용을 확인한다.

re?

- re이후의 값이 0, 1번 발생한 내용을 확인한다.

re{n}

- re가 정확히 n번 방생하는지 확인한다.

re{n, }

- re가 정확히 n번 이상 발생했는지 확인한다.

re{n, m}

- re가 정확히 n에서 m까지 발생했는지 확인한다.

a | b

- a혹은 b인지 확인한다.

(re)

- 그룹 정규식을 지정하고 매치되는 텍스트를 기억한다.

(?imx)

- 임시적으로 i, m, x옵션을 정규식에 대해서 토글 한다.

(?-imx)

- 임시적으로 i, m, x 옵션을 정규식에 대해서 토글 오프한다.

만약 괄호안에 있다면 area에만 적용이 된다.

(?: re)

- 그룹 정규식을 수행한다. 그러나 매치된 텍스트는 저장하지 않는다.

(?imx: re)

- 임시적으로 i, m, x 옵션이 토글 되어진다.

(?-imx: re)

- 임시적으로 i, m, x 옵션이 괄호안에 토글 오프된다.

(?#…)

- 커멘트

(?= re)

- 패턴을 이용하여 특정 위치를 지정한다. 그리고 범위는 존재하지 않는다.

(?!re)

- 패턴이 아닌 것에 대한 특정 위치를 지정한다. 이것은 범위는 존재하지 않는다.

(?>re)

- 백트래킹 없이 독립적인 패턴을 매치한다.

\w

- word 캐릭터를 매치한다.

\W

- word가 아닌 캐릭터를 매치한다.

\s

- [\t\n\r\f]에 해당하는 공백을 매치한다.

\S

- 비 공백과 매칭되는지 확인한다.

\d

- digit과 매칭을 처리한다. 이는 [0-9]에 해당한다.

\D

- nondigits 과 매칭을 처리한다.

\A

- 스트링으로 시작하는지 매치 처리한다.

\Z

- 스트링으로 끝나는건지 매칭한다. 만약 뉴라인이 존재한다면 뉴라인 전까지만 매치 처리한다.

\z

- 스트링의 끝을 매치한다.

\G

- 마지막 매치로 끝이 났는지 매치 포인트를 찾는다.

\b

- 외부 브라켓을 하는경우 단어 바운더리를 매치한다. 내부 브라켓들안에서는 백스페이스 매치를 한다.

\B

- 비단어 바운더리들을 매치한다.

\n, \t, etc

- 뉴라인, 캐리지리턴, 탭등과 같은지 매치한다.

\1..\9

- 그룹화된 하위 표현식의 n번째 매치를 한다.

\10

- 만약 매치 된경우라면, n번째 그룹화된 하위 표현식을 매치한다. 그렇지 않으면 캐릭터 코드의 8진법을 표시한다.

정규 표현식 예제

python : “python”과 매칭한다.

Character classes

[Pp]ython : “Python”과 “python”을 매치한다.

rub[ye] : “ruby”과 “rube”를 매치한다.

[aeiou] : “하나의 소문자 모음과 매치한다.”

[0-9] : digit를 매치한다. 이는 [0123456789]와 같다.

[a-z] : 소문자 아스키 영문자와 매치한다.

[A-Z] : 대문자 아스키 영문자와 매치한다.

[a-zA-Z0-9] : 상단 영문자, 숫자 모두 매치한다.

[^aeiou] : 소문자 모음과 매치되지 않는 모든 문자를 매치한다.

[^0-9] : 숫자가 아닌 모든 문자를 매치한다.

Special Character Classes

. : 뉴라인을 제외한 어떠한 문자와든 매치한다.

\d : 숫자와 매치한다. [0-9]

\D : 숫자가 아닌 부분만 매칭한다. [^0-9]

\s : 공백 문자와 매치한다. [\t\r\n\f]

\S : 공백이 아닌 문자와 매치한다. [^\t\r\n\f]

\w : 하나의 단어와 매치되는지를 검사한다. [A-Za-z0-9_]

\W : 단어가 아닌 문자와 매치되는지 검사한다. [^A-Za-z0-9_]

Repetition Cases

ruby? : rub 혹은 ruby와 매치한다. y는 옵션이다.

ruby* : rub 에 0개 이상의 y를 매치한다.

ruby+ : rub 에 1개 이상의 y를 매치한다.

\d{3} : 정확하게 3개의 숫자를 매치한다.

\d{3,} : 3개 이상의 숫자를 매치한다.

\d{3,5} : 3개에서 5개의 숫자를 매치한다.

Nongreedy repetition

반복의 수중에서 최소수의 매치를 찾는다.

<.*> : Greedy repetition: matches “perl>"

<.*?> : Nongreedy: matches “" in "perl>"

Grouping with Parentheses

\D\d+ : 그룹이 없음 : + 는 \d를 반복한다.

(\D\d)+ : 그룹이 설정됨 : +는 (\D\d) 쌍을 반복한다.

([Pp]ython(,)?)+ : “Python”, “Python, python, python”, 기타등등..

Backreferences

이전에 매치된 그룹을 다시한번 매치되도록 한다.

([Pp])ython&\1ails : python&pails혹은 Python&pails와 매치한다.

([’”])[^\1]*\1 : 싱글 혹은 더블쿼터 스트링이다. \1은 첫번재 그룹 매치를 한다. \2는 두번째 그룹 매치를 수행한다.

Alternatives

python|perl : “python”혹은 “perl” 매치를 한다.

rub(y|le)) : “ruby” 혹은 “ruble” 매치한다.

Python(!+|\?) : “Python” 으로 마지막에 하나 이상의 !혹은 하나의 ?와 매치한다.

Anchors

이것은 특정 매치 포지션을 지정하기 위해 필요하다.

^Python

- “Python”으로 시작되는지 검사한다.

Python$

- “Python”으로 끝이 나는지 검사한다.

\APython

- 스트링의 시작이 “Python”인지 검사한다.

Python\Z

- 스트링이 “Python”으로 끝이 나는지 검사한다.

\bPython\b

- 단어의 바운더리에서 Python으로 매치 되는지 검사한다.

\brub\B

- \B는 비 단어 바운더리, “rube”, “ruby” 에서 “rub”와 매치를 검사한다. 그러나 “rub”아닌 것 매칭\