본문 바로가기

프로그래밍/Python

정규표현식 (정규식) - Python Regular Expression

정규표현식 (정규식) - Python Regular Expression

 

정규표현식은 언어와 프로그램 종류에 따라 조금씩 다르기 때문에 사용하는 언어에 맞게 작성해야 합니다. 

 

파이썬은 re 라이브러리를 사용합니다.

아래와 같은 형식으로 정규식 결과를 확인 할 수 있습니다.

 

import re

checkString = 'azb'

p = re.compile('a.b')
print(checkString == p.match(checkString).group())

 

결과 : True / False

 

 

정규 표현식 기호 : * + [] () {m,n} [^] | . ^ \ $ ?!

 

위 12개에 대해 확인해 보겠습니다.

 

====================================

 

1. 정규 표현식 기호 : *

바로 앞에 있는 문자, 하위 표현식, 대괄호로 묶인 문자들이 0번 이상 나타납니다. 

 

정규식 Match 문자열
win*g wig, wing, winnnnng
w(in)*g wg, wing, winining
w[in]*g wg, wing, winining
w[i-n]*g wg, wig, wing, winining, winjnkg
win{2,3}g winng, winnng

win{2,3}*g 는 반복의 중복으로 에러가 발생합니다. 사용불가

 

 

2. 정규 표현식 기호 : +

바로 앞에 있는 문자, 하위 표현식, 대괄호로 묶인 문자들이 1번 이상 나타납니다. 

 

정규식 Match 문자열
win+g wing, winnnnng
w(in)+g wing, winining
w[in]+g wing, winining
w[i-n]+g wig, wing, winining, winjnkg

win{2,3}+g 는 반복의 중복으로 에러가 발생합니다. 사용불가

 

 

3. 정규 표현식 기호 : [ ]

대괄호 안에 있는 문자 중 하나가 나타납니다.

 

정규식 Match 문자열
[abc] a, b, c
[Pp]ython Python, python

 

[ ] 안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위(From - To)를 의미합니다.

정규식 Match 문자열
[a-zA-Z] 알파벳 모두
[0-9] 숫자
[a-zA-Z0-9] 알파벳과 숫자

*이나 +가 없으면 문자 1개 입니다.

 

 

4. 정규 표현식 기호 : ( )

그룹으로 묶인 하위 표현식입니다. 

정규식을 평가할 때 하위표현식이 먼저 평가됩니다.

 

정규식 Match 문자열
(d*g) g, dg, dddg
(d*g)* g, dg, dddgdgdgddg

 

 

5. 정규 표현식 기호 : 패턴{m,n}

바로 앞의 패턴이 m번 이상 n번 이하로 반복됩니다.

 

정규식 Match 문자열
\d{3,5} - 숫자가 3개에서 5개 나타날 수 있습니다. 543, 5454, 54545
dog{3,5} doggg, doggggg
(dog){3,5} dogdogdog, dogdogdogdogdog

 

패턴{m}

바로 앞의 패턴이 m번 반복됩니다.

정규식 Match 문자열
\d{3} 123, 333, 555
dog{3} doggg
(dog){3} dogdogdog

 

? - ?매타문자는 {0,1} 과 동일한 의미입니다.

정규식 Match 문자열
dog? do, dog
d(og)? d, dog

 

 

6. 정규 표현식 기호 : [^]

대괄호 안에 있는 문자를 제외한 문자가 나타납니다.

정규식 Match 문자열
[^A-Z]* - 소문자를 나타냅니다. dog, cat, house
d[^o]g dag, dOg, d1g
d[^a-zA-Z0-9]g d@g, s%g, d#g

 

 

7. 정규 표현식 기호 : |

| 로 분리된 문자, 문자열, 하위표현식 중 하나가 나타납니다.

| 는 파이프 라 부르는 세로 막대이며 대문자 I 가 아닙니다.

정규식 Match 문자열
h(o|u|s)e hoe, hue, hse
(com|org|net) com, org, net

 

 

8. 정규 표현식 기호 :.

문자 하나(글자, 숫자, 기호, 공백 등)가 나타납니다.

정규식 Match 문자열
d.g dog, d0g, d#g, d g

 

 

9. 정규 표현식 기호 :^

바로 뒤에 있는 문자 또는 하위 표현식이 문자열의 맨 앞에 나타납니다.

즉 뒤 패턴으로 시작해야 합니다. 사용하지 않아도 됩니다.

정규식 Match 문자열
^abc abc
^abc. abcd
^abc* abc, abccc

 

 

10. 정규 표현식 기호 : \

특수 문자를 원래 의미로 쓰게 하는 이스케이프 문자입니다.

정규식 Match 문자열
\. .
\\ \
\| |
import re

checkString = '\\'

p = re.compile('\\\\')
print(checkString == p.match(checkString).group())

 

 

11. 정규 표현식 기호 :$

바로 앞에 있는 문자 또는 하위 표현식이 문자열의 마지막이라는 뜻입니다.

즉 앞 패턴으로 종료되어야 합니다. 사용하지 않아도 됩니다.

^ 기호의 반대라고 생각해도 됩니다.

정규식 Match 문자열
xyz$ xyz
[a-z]*xyz$ xyz, axyz, abcxyz
^xyz$ xyz

 

 

12. 정규 표현식 기호 : ?!

포함하지 않는다는 뜻입니다. 

다음에 나타나는 문자 또는 하위표현식이 해당 위치에는 나타나지 않습니다.

다른 위치에는 나타날수 있습니다. 

정규식 Match 문자열
[a-z](?![a-z]). xP, x0, x$

 

 

 

[자주 사용하는 문자 클래스]


\d - 숫자와 매치, [0-9]와 동일한 표현식
\D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식
\s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미
\S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식
\w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식
\W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식

 

 

[ 컴파일된 패턴 객체를 사용한 문자열 검색 Method ]

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


[ match() 와 search() 를 수행한 결과로 돌려준 match 객체가 사용하는 함수 ]

group() - 매치된 문자열을 돌려준다.
start() - 매치된 문자열의 시작 위치를 돌려준다.
end() - 매치된 문자열의 끝 위치를 돌려준다.
span() - 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 돌려준다.

 

 

 

반응형