# 정규 표현식(Regular Expression)
정규 표현식이란 문자열의 형식을 검사하는 식입니다. 문자열 자체만으로는 너무 빈약하기 때문에 이를 보완하기 위해 등장했습니다.
(자바스크립트 언어용 사이트를 이용해야함) 파이썬에서는 내장 모듈 중 re 모듈이 정규표현식을 지원합니다. 따라서 랜덤처럼 앞에
import re 라는 명령을 써줘야 합니다.
[정규표현식에서 사용되는 기호들]
^ 문장이 시작하는 지점
$ 문장이 종료하는 지점
abc abc라는 글자가 나와야 합니다.
[abc] a , b , c 중에 한 글자가 나와야 합니다.(one of)
[a-c] [abc]와 동일
[a-z] 알파벳 소문자 1글자
[A-Z] 알파벳 대문자 1글자
[A-Za-z] 알파벳 1글자
[0-9] 숫자 1글자
[A-Za-z0-9] 알파벳 + 숫자 1글자
[가-힣] 한글(완전한 글자) 1글자
[ㄱ-ㅎㅏ -ㅣ 가-힣] 한글(자모음 포함) 1글자
[a-z]{2} 알파벳 소문자 2글자
[a-z]{3,5} 알파벳 소문자 3~5글자
[a-z]{3,} 알파벳 소문자 3글자 이상
주의 : 숫자 자리에는 양수만 작성 가능(0 이하는 불가능)
(hello|hi) hello 또는 hi 중 한 단어가 나옴
모든 글자(파이썬에서는 그냥 . 으로 인식)
\. 언어 무관하고 .인식
정규표현식에서 사용되는 기호들 입니다.
사이트에 들어가서 한번 봐보겠습니다.
위에처럼 ^[a-zA-Z]$라 하면 ^가 시작지점 을 뜻하고 중간에 대괄호 안에 쓴것은 알파벳 1글자 를 뜻합니다. $는 마지막 지점을 뜻하구요.
사이트에서 자기가 짠 코드를 입력하면 틀린부분을 알 수 있고 그림을 통해 더 쉽게 이해할 수 있습니다.
** 참고 **
# match와 search는 여러줄일 때 차이가 발생
# match는 한줄이든 여러줄이든 동일하게 처리
# search는 줄마다 다르게 처리
'''
사용자에게 아이디를 입력받아서 형식 검사 수행 후 결과를 출력
- 알파벳 + 숫자 + 대시(-) + 언더바(_) 로 구성된 8 ~ 20 자
- 첫글자는 반드시 알파벳으로 할 것
'''
예시 문제입니다.
사용자에게 아이디를 입력받아서 형식 검사 수행 후 결과를 출력하라는 문제인데요
형식은 알파벳과 숫자 , 대시 , 언더바로 구성된 8~20글자 입니다. 그리고 첫글자는 반드시 알파벳으로 시작하라는 조건도 있습니다.
import re
import re as test # 모듈에 별칭 붙여 사용
id = input('아이디 입력 : ')
# 모든 언어 공용
# regex = '^[a-zA-z][a-zA-Z0-9_-]{7,19}$'
# result = test.search(regex.id)
# 파이썬 Flag 사용하여 대소문자 무시
regex = '^[a-zA-z][a-zA-Z0-9_-]{7,19}$'
result = test.search(regex , id , test.IGNORECASE)
if result :
print(f'[{id}] 사용할 수 있는 형식입니다.')
else :
print(f'[{id}] 사용할 수 없는 형식입니다.')
해설입니다. import re는 필수이고요, 풀이를 좀더 쉽게 하기 위해 이름을 붙여줍니다. 붙여줄 때에는 as .... 을 씁니다.
그리고 아이디를 입력받게 하고 코드는 알파벳은 [a-zA-Z] 숫자와 언더바 , 대시 는 [a-zA-Z]뒤에 숫자를 나타내는 0-9 , 언더바와 대시를 붙입니다,
그리고 8~20자 이기 때문에 뒤에{}안에 7,19를 씁니다. (반복과 비슷) 그리고 끝에 $표시를 붙이면 코드가 완성됩니다.
사이트에 이 코드를 써보면 이런 그림이 나타납니다.
마지막 부분은 if문을 써서 나타내줍니다.
'''
사용자에게 이메일을 입력받아 형식 검사 수행 후 출력
XXXXXX@XXXX.co.kt
XXXXXX@XXXX.com
XXXXXX@XXXX.net
- 이메일에는 @가 들어가야 합니다
- @ 앞부분은 8~20글자의 ID 형식이 들어갑니다.(이전문제 참고)
- @ 뒷부분은 2~10글자의 알파벳과 .com , .net , .co.kr 로 끝나는 글자가 나와야 합니다
'''
import re as test
email = input('이메일을 입력하세요 : ')
regex ='^[a-zA-Z]{7,19}@[a-zA-Z0-9_-]{2,10}(\\.com|\\.net|\\.co\\.kr)$'
result = test.search(regex.email)
if result :
print('이메일 형식입니다')
else :
print('이메일 형식이 아닙니다')
다음 문제입니다. 이번에는 이메일을 입력받아 형식 검사 수행 후 출력하라는 문제입니다.
이메일에는 @표시가 들어가야 하고 @앞에는 8~20글자의 ID형식 , @뒤에는 2~10글자의 알파벳과 그 뒤에 .com 이나 .net , .co.kr로 끝나야 합니다
코드는 @앞에부터 해보면 알파벳이 들어가야 하기 때문에 [a-zA-Z] 8 ~20글자 : {7,19} , @ 뒤에는 [a-zA-Z0-9_-] 2~10글자 : {2,10}
그리고 \\. 은 점 처리 입니다. | 는 or 입니다. .com 아니면 .net 아니면 .co.kr이 들어가야 하기때문에 위에 처럼 코드를 짭니다.
사이트를 이용해 그림을 보면 이렇게 나타나게 됩니다.
'Python' 카테고리의 다른 글
| Python_14Day (0) | 2019.03.05 |
|---|---|
| Python_13Day (0) | 2019.03.04 |
| Python_11Day (0) | 2019.02.27 |
| Python_10Day (0) | 2019.02.26 |
| Python_09Day (0) | 2019.02.25 |