다들 한번쯤을 들어 보셨을 것 같은데요, 정규 표현식(Regular Expression)에 대한 이야기를 하고자 합니다. 정규 표현식은 특정한 규칙을 가지고 있는 문자열들을 표현하는데 사용되는 규칙을 가진 언어로 메타문자(Meta Character)라고 합니다. 문자열의 시작, 끝, 문자, 숫제 등 특정 규칙 혹은 패턴에 맞는지를 검사할 수 있는 것인데요, 그 예로 주어진 문서상에 특정 문자가 있는지, 반복패턴이 있는지, 인터넷상의 로그인 패스워드 규칙을 확인하는 것 등이 있습니다.
표현식 | 기능 | 설명 |
^ | 시작 | 문자열의 시작을 의미. ^A A로 시작 |
$ | 끝 | 문자열의 끝을 으미 |
. | 문자 | 한 개의 문자 |
\d | 숫자 | 한 개의 숫자 |
\w | 문자와 숫자 | 한 개의 문자나 숫자 |
\s | 공백문자 | 공백 문자(스페이스, 탭, 줄바꿈 등) |
\S | 공백제외 문자 | 공백 문자를 제외한 모든 문자 |
* | 반복 | 앞 문자가 0번 이상 반복 |
+ | 반복 | 앞 문자가 1번 이상 반복 |
? | 반복 | 앞 문자열 임의의 패턴을 0번 또는 1번 이상 반복 |
[abc] | 문자 선택 범위 | a, b, c 가운데 하나의 문자 |
[^abc] | 문제 제외 범위 | a, b, c 가 아닌 어떤 문자 |
| | 또는 | | 앞의 문자 또는 뒤의 문자 |
+의 경우는 1번 이상 반복되어야 하기 때문에 아래와 같은 경우는 조건에 맞지 않게 됩니다.
re.search('AB+', 'A') # 맞지 않음
re.search('AB+', 'AA') #맞지 않음
re.search('AB+', 'CABBA') #조건에 맞음 ABB
파이썬에서 정규식을 사용하려면 're' 모듈을 import 해야 합니다.
import re
txt1 = 'Life is too short, you need python.'
txt2 = 'The best moments of my life.'
#문장 안에 Life가 있는지 검사
print(re.search('Life', txt1))
match = re.search('Life', txt1)
match.start() # 0
match.end() # 4
match.span() # (0, 4)
txt1[0:4] #'Life'
print(re.search('Life|life', txt2)) # 문장 안에 Life 또는 life가 있는지 검사
print(re.search('[Ll]ife', txt2)) # 문장 안에 Life 또는 life가 있는지 검사
print(re.search('^Life', txt1)) # 제일 첫단어로 Life가 있는지 검사
findall() 함수는 정규식을 만족하는 모든 문자열을 추출 합니다.
txt3 = 'My life my life my life in sunshine'
re.findall('[Mm]y', txt3)
#결과
['My', 'my', 'my']
sub() 함수는 특정 문자를 대체합니다.
import re
s = 'I like BTS!'
re.sub('BTS', 'Black Pink', s)
다음과 같은 문제를 통하여 실습해보세요!!
문제1) 다음과 같은 수강 교과목 코드와 약칭으로 된 문자열이 있을때, 수강 번호만 리스트 형식으로 추출하라
101 COM PythonProgrammng
102 MAT LinearAlgebra
103 ENG ComputerEnglish
결과
['101', '102', '103']
문제2) 아래 텍스트에서 이메일 주소만 추출하라
txt = 'abc@facebook.com와 bbc@google.com에서 이메일이 도착하였습니다. '
결과
추출된 이메일 : ['abc@facebook.com', 'bbc@google.com']
문제3) 패스워드 검사 프로그램 만들기
조건1 : 최소 8글자
조건2 : 적어도 하나의 영문자 대문자 및 소문자를 포함
조건3 : 적어도 하나의 숫자 포함
조건4 : 특수문자[_, @, $, !] 중 하나 포함
import re
# 패스워드 체크 함수 정의
def passwordCheck(pwd):
if len(pwd) < 8 or len(pwd) > 21:
print('비밀번호는 8자이상 20자 이하여야 합니다.')
return False
elif not re.findall('[0-9]+', pwd):
print('숫자를 포함하여야 합니다.')
return False
elif not re.findall('[a-z]', pwd) or not re.findall('[A-Z]', pwd):
print('소문자 및 대문자를 포함하여야 합니다.')
return False
elif not re.findall('[`~!@#$%^&*(),<.>/?]+', pwd):
print('비밀번호는 최소 1개 이상의 특수문자가 포함되어야 합니다.')
return False
print('정상입니다.!!!')
return True
# 패스워드 입력 및 회수 카운트
cnt = 0
while True:
pwd = input("패스워드를 입력하세요 :")
result = passwordCheck(pwd)
if cnt < 6:
if result == False:
cnt += 1
if cnt == 5:
print('패스워드 입력회수를 초과하였습니다.')
break
else:
print('다시 입력하세요!!')
else:
print('잘입력하셨습니다.')
break
print('종료합니다.')
하나씩 잘 정리해 보아야 겠습니다. 오늘하루도 즐거운 하루 되십니다.
본 내용은 구자환 교수님 강의를 기반으로 하였습니다.
공감과 구독은 제게 많은 힘이 될 듯 합니다. !!!
'하얀눈으로 IT' 카테고리의 다른 글
PowerMockup (1) | 2023.11.03 |
---|---|
비정형 데이터 분석 - 텍스트 데이터의 문자열 처리 (2) | 2022.09.28 |
[파이썬] 파이썬 도구(아나콘다-Jupyter Notebook) (0) | 2022.09.19 |
비정형 데이터 분석 기본 - 빅데이터와 데이터의 종류 (0) | 2022.09.07 |
댓글