Cute Running Puppy

Python

Python_12Day

jwjin 2019. 2. 28. 23:12
728x90

# 정규 표현식(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이 들어가야 하기때문에 위에 처럼 코드를 짭니다.

사이트를 이용해  그림을 보면 이렇게 나타나게 됩니다.














728x90

'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