Python 정규 표현식

Jayce·2023년 5월 10일
0

Python 기초

목록 보기
9/10
post-thumbnail

오늘은 정규표현식이 무엇인지 어떤식으로 활요하는지에 대해 공부해보도록 하겠습니다.


표현식의 기초, meta char

정규 표현식에 사용되는 메타문자(meta charachers)는
메타 문자란 그 문자가 가진 뜻이 아닌 특별한 용도로 사용되는 문자입니다.
줄바꿈을 위해 "\n"를 사용하는데 여기 사용되는 \이 메타문자입니다.
예로는 ". ^ $ * + ? { } [ ] \ | ( )"이있습니다.

[] A set of characters
\ Signals a special sequence (can also be used to escape special characters)
. Any character (except newline character)
^ Starts with
$ Ends with
* Zero or more occurrences
+ One or more occurrences
{} Exactly the specified number of occurrences
| Either or
() Capture and group

re 모듈

re(regular expression)모듈은 파이썬에서 정규 표현식을 지원하기 위해 만들어졌으며,
파이썬을 설치할 때 자동으로 설치되는 표준 라이브러리입니다.

정규표현식에 대해 코드를 통해 좀 더 자세히 알아보도록 하겠습니다.


finall함수(패턴 검색)

input

# 정규표현식 모듈 불러오기
import re 
text='My id number is kim0313'
text=text.lower()
a=re.findall('a',text) # findall(패턴, 문자열)  모든 패턴 검색 
print(a)
kim=re.findall('kim',text)
print(kim)
m=re.findall('m',text)
print(m)

output

[]['kim']
['m', 'm', 'm']

s 변수 안에 텍스트를 넣고 lower함수를 이용하여 소문자로 변경해줍니다.
후 s안의 'a', 'kim', 'm'이 몇번 들어갔는지 findall을 통해 찾아줍니다.


[]이용한 범위설정

input

text='My id number is kim0313'
small=re.findall('[a-z]',text) # 소문자 - 문자단위
print(small)
allsmall=re.findall('[a-z]+',text) # + 단어단위
print(allsmall)
big=re.findall('[A-Z]',text)
print(big)
num=re.findall('[0-9]',text)
print(num)
allnum=re.findall('[0-9]+',text)
print(allnum)

output

['y', 'i', 'd', 'n', 'u', 'm', 'b', 'e', 'r', 'i', 's', 'k', 'i', 'm']['y', 'id', 'number', 'is', 'kim']
['M']['0', '3', '1', '3']
['0313']

[]를 통해 범위를 설정하여 a(소문자), b(소문자 단어 전체), c(대문자), d(숫자), e(숫자전체)
를 찾습니다.


[]이용한 범위설정 응용

input

text='안녕하세요 My id number is kim_0313$%'
ennum=re.findall('[a-zA-Z0-9]',text) # 소문자,대문자,숫자
print(ennum)
allennum=re.findall('[a-zA-Z0-9]+',text)
print(allennum)
notennum=re.findall('[^a-zA-Z0-9]',text) # [^] not 
print(notennum)
every=re.findall('[\w]',text) # 한글,영문자,숫자,_
print(every)
allevery=re.findall('[\w]+',text)
print(allevery)
sc=re.findall('[\W]+',text) # 영문자,숫자,_가 아닌 값들 
print(sc)

output

['M', 'y', 'i', 'd', 'n', 'u', 'm', 'b', 'e', 'r', 'i', 's', 'k', 'i', 'm', '0', '3', '1', '3']['My', 'id', 'number', 'is', 'kim', '0313']
['안', '녕', '하', '세', '요', ' ', ' ', ' ', ' ', ' ', '_', '$', '%']['안', '녕', '하', '세', '요', 'M', 'y', 'i', 'd', 'n', 'u', 'm', 'b', 'e', 'r', 'i', 's', 'k', 'i', 'm', '_', '0', '3', '1', '3']
['안녕하세요', 'My', 'id', 'number', 'is', 'kim_0313'][' ', ' ', ' ', ' ', ' ', '$%']


[]이용한 범위설정 응용(비밀번호 설정)

input

def pwd_check(pwd):
    if len(pwd)<6 or len(pwd)>12: 
        print(pwd,': 길이가 적당하지 않습니다.')
        return 
    if re.findall('[a-zA-Z0-9]+',pwd)[0] != pwd:
        print(pwd,': 숫자와 영문자만 쓸 수 있습니다.')
        return 
    if len(re.findall('[a-z]',pwd))==0 or len(re.findall('[A-Z]',pwd))==0:
        print(pwd,': 대문자와 소문자가 모두 필요합니다.')
        return 
    print(pwd, ': 올바른 비밀번호입니다.')   
pwd_check('12abc')
pwd_check('123abc')
pwd_check('123abc%')
pwd_check('123Abc') 

output

12abc : 길이가 적당하지 않습니다.
123abc : 대문자와 소문자가 모두 필요합니다.
123abc% : 숫자와 영문자만 쓸 수 있습니다.
123Abc : 올바른 비밀번호입니다.

범위설정을 이용하여 비밀번호를 어떤식으로 만들어야 할지 유도 할 수 있습니다.


[]이용한 범위설정 응용(이메일 설정)

input

import re 
def email_check(email):
    exp=re.findall('^[a-z0-9]{2,}@[a-z0-9]{2,}.[a-z]{2,}$',email)
    if len(exp)==0:
        print(email,': 이메일 규칙에 맞지 않습니다.')
        return False 
    print(email,': 올바른 이메일 주소입니다.')
    return True
email_check('kim@naver')
email_check('kim_naver.com')
email_check('kim')
email_check('kim@naver.com')

output

kim@naver : 이메일 규칙에 맞지 않습니다.
kim_naver.com : 이메일 규칙에 맞지 않습니다.
kim : 이메일 규칙에 맞지 않습니다.
kim
aver.com : 이메일 규칙에 맞지 않습니다.
False

지금까지 문제를 이해가 되셨다면 Ture가 나오도록 할 수 있을 것입니다.


이상으로 오늘은 정규표현식에 대해 배워 보았습니다. 자주 사용하던 \t,\n등 앞에 붙어있는 역슬레쉬와 특수 기호를 사용하기위해 \,* 등 자주 써왔던 것이지만 의미를 알고 사용한다면 코드를 이해하는데 더욱 도움이 되리라 생각합니다. 오늘도 긴 글 읽으시느라 고생 많았습니다.

😁 power through to the end 😁

profile
Dreamer

0개의 댓글