파이썬 정규식 표현

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은 유효성 검사 통과