본문 바로가기
데이터&AI

정규표현식(regex, 레젝스) with 파이썬!! (1) - 기본

by 일등박사 2023. 1. 7.
728x90
import re

텍스트 작업을 하다보면 필요로하는 텍스트 유형만 산출해야하는 경우가 많습니다!

예를 들면 텍스트 내에서 ~~~@~~~.com 이라는 형식의 이메일 주소만 뽑기

혹은 010-XXXX-XXXX 형식의 전화번호 뽑기 등,,

이럴때 우리는 정규 표현식을 사용하게 되는데요!!

오늘은 파이썬에서의 정규표현식 활에 대하여 정리해보도록 하겠습니다!


시작하기

 

우선!! 파이썬에서 정규표현식은 어떻게 사용할 수 있을까요??

re 라는 패키지지가 설치되어 있어야합니다!!

import re

 

이제 간단한 예시를 알아봅시다.

전체 텍스트에서 "일등박사" 라는 것을 찾는것 인데요!!

 

re.compile를 통하여 찾고자하는 텍스트를 찾는 객체를 만들어 준 뒤(find_myName),

 target_sentence 에서 find_myName를 찾아줍니다!!

(find_myName.search(target_sentence))

target_sentence = """일등박사의 블로그 입니다
"""

find_myName = re.compile("일등박사")
find_myName.search(target_sentence)

이에 대한 결과 아래와 같이 "일등박사" 라는 텍스트가 위치한 곳에 대한 정보를 알려줍니다!

<re.Match object; span=(0, 4), match='일등박사'>

 


기본 >> "."

 

이제!! 간단한 정규표현식을 통하여 필요한 텍스트를 찾아봅시다!!

. 은 한개의 글자를 의미합니다!!

아래와 같이 여러 텍스트가 있고(target_sentence)

우리는 ~~석사 라는 단어만을 찾고자 합니다.

이때 ~의 역할을 . 가 해줍니다.

(이때의 . 을 메타문자라고합니다.

 뒤에서 다양한 메타문자를 배울 예정입니다)

re.findall ("찾고자하는 패턴", 목표 텍스트) 로 다음과 같이 찾을 수 있습니다.

target_sentence = """
일등박사
이등박사
삼등박사
사등박사
일등석사
이등석사
삼등석사
사등석사
일등학사
이등학사
삼등학사
사등학사
"""

find_myName = re.compile("..석사")
re.findall(find_myName,target_sentence)
['일등석사', '이등석사', '삼등석사', '사등석사']

예외의 "." >>  \ 활용하기

앞 부분을 통하여 . 이 있을 경우 한개의 문자를 대체한다는 것을 알 수 있었습니다

그렇다면 실제 . 을 찾고싶을떄는 어떻게 할 수 있을까요?

바로 역슬래시 "\" 를 활용하는 것입니다.

다음 예시를 보아요!

target_sentence = """
일등박사.
일등박사,
일등박사?
일등박사/
일등박사"
일등박사'
일등박사~
이등박사.
이등박사,
이등박사?
이등박사/
이등박사"
이등박사'
이등박사~
"""

find_myName = re.compile(".등박사\/")
re.findall(find_myName,target_sentence)

위에서의 정규표현식 ".등박사\."

는 ~등박사이며 "." 으로 끝나는 것을 찾아라는 뜻입니다. 

그 결과는 아래와 같이 확인됩니다!!

['일등박사.', '이등박사.']

 

조건 만들기!!  >>  "[",  "]" 활용하기

일등만 기억하는 세상이 아닙니다!!

이제 이등도 기억하는 세상이 되었습니다!

그렇기에 일등, 이등 친구들을 모두 찾고자 합니다!

이때 우리는 대괄호 안에 필요한 것들을 모두 넣어줍니다. 

"[일이]등.." 으로 일등~~ 와 이등~~ 를 모두 찾고자 합니다.

target_sentence = """
일등박사
이등박사
삼등박사
사등박사
일등석사
이등석사
삼등석사
사등석사
일등학사
이등학사
삼등학사
사등학사
"""
find_myName = re.compile("[일이]등..")
re.findall(find_myName,target_sentence)

그 결과~!! 아래처럼 일등/이등 친구들을 모두 찾을수 있었습니다.

['일등박사', '이등박사', '일등석사', '이등석사', '일등학사', '이등학사']

더 관대해진 세상, 

삼등까지 찾아볼까요!?

target_sentence = """
일등박사
이등박사
삼등박사
사등박사
일등석사
이등석사
삼등석사
사등석사
일등학사
이등학사
삼등학사
사등학사
"""
find_myName = re.compile("[일이삼]등박사")
re.findall(find_myName,target_sentence)

즉 대괄호 안에 필요한 모든 단어를 넣으면 찾을 수가 있어요!!

['일등박사', '이등박사', '삼등박사']

 

 

조금더 복잡하게!!!!

우리는  일등 혹은 이등이며 마침표(.) 혹은 물음표(?)로 끝나는 단어들을 찾고자합니다.

이떄의 정규표현식은 "[일이]등..[/./?]" 입니다!!

target_sentence = """
일등박사~
이등박사~
삼등박사~
사등박사~
일등석사~
이등석사~
삼등석사~
사등석사~
일등학사~
이등학사~
삼등학사~
사등학사~
일등박사?
이등박사?
삼등박사?
사등박사?
일등석사?
일등박사.
이등박사.
삼등박사.
사등박사.
일등석사.
"""
find_myName = re.compile("[일이]등..[/./?]")
re.findall(find_myName,target_sentence)

필요한 것만 잘 찾아지죠~~?

['일등박사?', '이등박사?', '일등석사?', '일등박사.', '이등박사.', '일등석사.']

 

조건에 다넣기!!!!  >>  "-" 활용하기

이제 대괄호를 활용하면 필요한 것들을 나열할 수 있음을 알수 있었습니다

그런데 나열하기 너무 많다면??? \

"-" 를 활용할 수 있습니다

 

target_sentence = """
일등박사
이등박사
삼등박사
사등박사
1등박사
2등박사
3등박사
4등박사
5등박사
6등박사
7등박사
8등박사
9등박사
"""
find_myName = re.compile("[2-6]등..")
re.findall(find_myName,target_sentence)

2등에서 6등만 찾고싶은 경우

[23456]으로 나열해도 되지만 [2-6] 으로도 가능한것 입니다!!

['2등박사', '3등박사', '4등박사', '5등박사', '6등박사']

 

제외하기!!!!  >>  "^" 활용하기

나는 숫자가 싫어!!

만약 한글만으로 된 글자를 찾고싶을떄는 어떻하면될까요?

이럴때 바로 "^"를 활용하게 됩니다.

target_sentence = """
일등박사
이등박사
삼등박사
사등박사
1등박사
2등박사
3등박사
4등박사
5등박사
6등박사
7등박사
8등박사
9등박사
"""
find_myName = re.compile("[^1-9]등..")
re.findall(find_myName,target_sentence)

잎서 배운 "-"를 활용하여 1-9를 모두 포함시킨뒤, 그 앞에 ^를 활용,

"[^1-9]등.."

을 통하여 숫자가 들어가지 아는 단어만을 찾게됩니다!

['일등박사', '이등박사', '삼등박사', '사등박사']

추가로 사등박사도 빼고싶다면??

target_sentence = """
일등박사
이등박사
삼등박사
사등박사
1등박사
2등박사
3등박사
4등박사
5등박사
6등박사
7등박사
8등박사
9등박사
"""
find_myName = re.compile("[^1-9^사]등..")
re.findall(find_myName,target_sentence)

^를 열거식으로 두번 사용하면 됩니다!

['일등박사', '이등박사', '삼등박사']
 
 앞으로도 계속 정규표현식 with 파이썬을 알아보아요!!

 

 


 

 

위 내용은 "손에 잡히는 정규표현식" 을 참고로 작성하였습니다!^^

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=4342103 

 

손에 잡히는 정규표현식

손에 잡히는 정규표현식

www.aladin.co.kr

 

728x90

댓글