PYTHON 정규식 문법 및 예제 ( 전화번호, 이메일, 숫자 출력, 공백 제거, URL 출력, 주민 번호 패턴 찾기 )

2023. 3. 25. 21:29it

반응형

 

 

0. 정규식이란

 

정규식(Regular Expression)은 문자열에서 패턴을 찾거나, 특정 문자열을 대체하거나, 추출하는 등의 작업을 수행하는데 사용되는 문자열 패턴이다. 정규식은 다양한 메타문자(meta-characters)를 사용하여 작성된다.

 

예를 들어, 이메일 주소, 전화번호, 우편번호, 주민등록번호 등과 같은 특정한 패턴을 가지는 문자열을 찾을 수 있다. 나 같은 경우, 스마트팩토리 구축 시 센서 ID를 추출하는 용도로 사용하기도 한다.

 

정규식은 다양한 프로그래밍 언어에서 지원이 되며, 해당 문법을 아고 있으면 문자열 파싱 작업에서 효과적인 업무 효율을 만들어 낼 수 있다. ( 하지만 조금 어렵다.. 나만 그런가..?? )

 

음, 예를 들어 아래와 같은 형식의 정규식이 있다.

 

[a-zA-Z0-9](-*[a-zA-Z0-9]){0,62}

 

외계어로 보일수 있으나... 문법이다.. 해석을 하자면, 아래와 같다.

 

[a-zA-Z0-9]: 알파벳 대소문자와 숫자 중 하나
(-*[a-zA-Z0-9]): '-' 문자가 0개 또는 여러 개 있고, 그 뒤에 알파벳 대소문자와 숫자 중 하나가 오는 패턴
{0,62}: 이전 패턴이 0개부터 62개까지 반복될 수 있는 패턴

 

728x90

 

1. 기본 문법

솔직히 나는 아직도 정규식에 대해서 잘 모른다. ㅋㅋ 그냥 인터넷이나 내가 원하는 정규식을 찾아서 사용한다. 그래도 문법을 공부하고 이해하고 써먹는 게 좋으니, 한번 정리해 보겠다. ( 나도 잘 모르지만... )

 

1-1. 타입

\d: 숫자(digit)와 매칭됩니다.
\w: 문자(word)와 매칭됩니다. 알파벳, 숫자, 밑줄(_)을 포함합니다.
\s: 공백(space)과 매칭됩니다. 탭(\t), 개행(\n) 등의 문자도 포함합니다.
\D: 숫자가 아닌 문자와 매칭됩니다.
\W: 문자가 아닌 문자와 매칭됩니다.
\S: 공백이 아닌 문자와 매칭됩니다.

 

1-2. 문법

마침표(.): 어떤 문자 하나
별표(*): 바로 앞에 있는 문자나 그룹이 0개 이상 반복됨을 의미
더하기(+): 바로 앞에 있는 문자나 그룹이 1개 이상 반복됨
물음표(?): 바로 앞에 있는 문자나 그룹이 0개 또는 1개 나타남
중괄호({}): 바로 앞에 있는 문자나 그룹의 반복 횟수

ex) 'a{3}' = 'aaa'와 같은 의미
대괄호([]): 대괄호 안에 있는 문자 중 하나와 매칭

ex ) [abc] = 'a', 'b', 'c' 중 하나와 같음
대괄호와 하이픈([]-): 대괄호 안에 하이픈을 사용하여 범위 지정

ex) '[a-z]' = a~z 알파벳 소문자 중 하나와 같음
세미콜론(;): 여러 개의 정규식을 구분
괄호(): 괄호 안에 있는 정규식을 하나의 그룹으로 묶어 줌

 

2. 예제

반응형

2-1 전화번호

import re

text = "전화번호는 010-1234-5678 연락해~"
pattern = r"\d{3}-\d{4}-\d{4}"
phone_namber = re.findall(pattern, text)

print(phone_namber) # 결과 값 : ['010-1234-5678']

 

2-2. 이메일

import re

text = "이메일 주소 example@email.com 이야. 연락줘"
pattern = r"[a-zA-Z0-9._+-]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}"
email = re.findall(pattern, text)

print(email) # 결과 값 :  ['example@email.com']

 

2-3. 숫자 출력

import re

text = "이 문장에서 123456 숫자를 찾아보세요."
pattern = r"\d+"
number = re.findall(pattern, text)

print(number) # 결과 값 :  ['123456']

 

2-4. 공백제거

import re

text = "     이 글에서 공백 제거해봐 ㅋㅋ 메롱     "
pattern = r"\s+"
is_text = re.sub(pattern, "", text)

print(is_text) # 결과 값 :  '이글에서공백제거해봐ㅋㅋ메롱'

 

2-5. URL 출력

import re

text = "내 블로그 주소는 https://urame.tistory.com/임, 알겠지?? "
pattern = r"https?://(?:[-\w]+\.)?([-\w]+\.[\w]+)(?:/[\w-./?%&=]*)?"
my_url = re.findall(pattern, text)

print(my_url) # 결과 값 :  ['urame.tistory.com']

 

2-6 주민번호 패턴

import re

pattern = r'\d{6}-\d{7}'
text = '내 주민번호는 123456-1234567 !!!.'
result = re.findall(pattern, text)
print(result) # 결과 값 : 123456-1234567

 

2-7. 스마트 팩토리 센서 ID 파싱 ( 나만을 위한... 정규식.... )

import re

tag_string = "TAG['ID_123']"
id_pattern = r"TAG\['(\w+)'\]"  # ID 값을 추출하는 정규식 패턴

tag_id = re.findall(id_pattern, tag_string)

print( tag_id ) # 결과 값 : ID_123

 

 

일단 이정도 예제를 만들어 보았다.

일단 예제가 다 re.findall() 문법으로 만들었다.

 

하지만, import re는 다양한 문법이 있다.

 

re.search(): 문자열에서 정규식과 매칭되는 첫번째 부분을 찾아서 match 객체 반환. ( 없으면 None )
re.match(): 문자열의 처음부터 정규식과 매칭되는 부분을 찾아서 match 객체 반환. (없으면 None)
re.findall(): 문자열에서 정규식과 매칭되는 모든 부분을 찾아서 리스트로 반환( 없으면 빈 리스트[] )
re.finditer(): 문자열에서 정규식과 매칭되는 모든 부분을 찾아서 match 객체들을 포함한 iterator 객체를 반환
re.sub(): 문자열에서 정규식과 매칭되는 부분을 다른 문자열로 치환

 

원하는 문법이 있으면 찾아 쓰길 바란다. ㅎㅎ

만약, 이 예제 말고 필요한 정규식 예제가 있으면, 예제를 만들어 올려 보겠다.

 

 

반응형