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)
^를 열거식으로 두번 사용하면 됩니다!
['일등박사', '이등박사', '삼등박사']
위 내용은 "손에 잡히는 정규표현식" 을 참고로 작성하였습니다!^^
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=4342103
'데이터&AI' 카테고리의 다른 글
정규표현식(regex, 레젝스) with 파이썬!! (3) - 예제 (0) | 2023.01.09 |
---|---|
정규표현식(regex, 레젝스) with 파이썬!! (2) - 메타문자와 반복 (0) | 2023.01.08 |
이루다 문제점 찾아보자!!(feat. 노동운동 비하, 천황 존경??, 동북공정) (0) | 2022.09.02 |
네이버의 에러 발견!! (feat. 고성군) (0) | 2022.05.30 |
python에서 mongoDB 이관하기!! (0) | 2022.05.13 |
댓글