정규표현식 (정규식) - 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() - 매치된 문자열의 (시작, 끝)에 해당하는 튜플을 돌려준다.
'프로그래밍 > Python' 카테고리의 다른 글
PyTest Documentation (0) | 2023.05.03 |
---|---|
간단한 gTTS 사용법 - GoogleTTS python (0) | 2022.01.04 |
pyinstaller - Python 파이썬 윈도우 실행 파일 (.exe) 만들기 (0) | 2020.04.01 |