파이썬 정규식 표현
2020. 6. 24. 23:30ㆍ개발노트
정규식은 주로 유효성 검사를 위해 사용하고
파이썬에서 정규식 사용을 위해 import re 해야한다.
# - 하이픈은 from - to 를 나타낸다.
# [a-zA-Z]는 알파벳 모두
# [0-9]는 숫자 모두
p = re.compile('[0-9]+')
string = ['ct','ㅅ11','123']
for s in string:
m = p.search(s)
if m:
print(f'{s}은 유효성 검사 통과')
else:
print(f'{s} 유효하지 않은 문자')
output>>
ct 유효하지 않은 문자
ㅅ11은 유효성 검사 통과
123은 유효성 검사 통과
# 꺽쇠 (^) 문자는 현재 정규식의 부적을 의미
# [^0-9]는 숫자를 제외한 모든 문자를 허용하는 정규식이다.
p = re.compile('[^0-9]')
string = ['ct','ct123','123']
for s in string:
m = p.match(s)
if m:
print(f'{s}은 유효성 검사 통과')
else:
print(f'{s} 유효하지 않은 문자')
output>>
ct은 유효성 검사 통과
ct123은 유효성 검사 통과
123 유효하지 않은 문자
# Dot(.)을 사용하면 문자와 문자 사에 어떤 값이든 허용한다.
# 예를 들면 아래와 같이 'a.b' 정규식은 a와 b 사이 모든 문자와 매치된다.
# 사이에 들어갈 문자의 수만큼 . 을 추가해야 한다.
p = re.compile('a..b')
string = 'a22b'
m = p.match(string)
if m:
print(f'{string}은 유효성 검사 통과')
output>>
a22b은 유효성 검사 통과
# 예외
# a와 b사이에 Dot(.)만 와야한다는 규칙을 적용하려면
# 'a[.]b'와 같이 써준다, 오직 a와 b 사이에는 . 만 올 수 있다.
p = re.compile('a[.][.]b')
string = 'a..b'
m = p.match(string)
if m:
print(f'{string}은 유효성 검사 통과')
output>>
a..b은 유효성 검사 통과
# 반복 (*)
# 예를 들어 'ca*t'와 같은 정규식이 있다면
# c와 t사이에 문자 a가 0~무한대로 반복될 수 있다는 의미이다.
p = re.compile('ca*t')
string = ['ct','caaaaaaaaaaaaat']
for s in string:
m = p.match(s)
if m:
print(f'{s}은 유효성 검사 통과')
else:
print(f'{s} 유효하지 않은 문자')
output>>
ct은 유효성 검사 통과
caaaaaaaaaaaaat은 유효성 검사 통과
# 반복 (+)
# 예를 들어 'ca+t'와 같은 정규식이 있다면
# c와 t사이에 문자 a가 1번 이상 나와야 한다.
p = re.compile('ca+t')
string = ['ct','caat']
for s in string:
m = p.match(s)
if m:
print(f'{s}은 유효성 검사 통과')
else:
print(f'{s} 유효하지 않은 문자')
output>>
ct 유효하지 않은 문자
caat은 유효성 검사 통과
# 반복 조건
# ca{2}t 같이 정규식을 쓰면 a는 반드시 2번 반복해야 한다.
# ca{2,5}t 같이 정규식을 쓰면 a는 2~5번 반복해야 한다.
# ? 가 의미하는 것은 {0, 1}이다 즉 있어도 되고 없어도 된다고 정의하는 것이다.
p = re.compile('ca{2}t')
string = ['cat','caat']
for s in string:
m = p.match(s)
if m:
print(f'{s}은 유효성 검사 통과')
else:
print(f'{s} 유효하지 않은 문자')
p = re.compile('ca{2,3}t')
string = ['caat','caaat']
for s in string:
m = p.match(s)
if m:
print(f'{s}은 유효성 검사 통과')
else:
print(f'{s} 유효하지 않은 문자')
p = re.compile('ca?t')
string = ['cat','ct']
for s in string:
m = p.match(s)
if m:
print(f'{s}은 유효성 검사 통과')
else:
print(f'{s} 유효하지 않은 문자')
output>>
cat 유효하지 않은 문자
caat은 유효성 검사 통과
caat은 유효성 검사 통과
caaat은 유효성 검사 통과
cat은 유효성 검사 통과
ct은 유효성 검사 통과