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”아닌 것 매칭\