지난 포스팅에 이어 정규표현식에 대하여 알아보겠습니다
2023.01.07 - [일등박사의 생각/데이터분석] - 정규표현식(regex, 레젝스) with 파이썬!! (1) - 기본
메타문자 활용하기 >> \
앞 부분을 . 을 찾고싶을떄 역슬래시 "\" 를 활용해야 한다고 배웠습니다.
다음 예시를 보아요!
target_sentence = """
[일등박사]
[이등박사]
[삼등박사]
[사등박사]
(일등박사)
(이등박사)
(삼등박사)
(사등박사)
{일등박사}
{이등박사}
{삼등박사}
{사등박사}
"""
find_myName = re.compile("[일등..]")
re.findall(find_myName,target_sentence)
대괄호 안의 일등~~ 를 찾고 싶어서 진행해보았으나... 결과는 이상한 값들이 나왔는데요!!
['일', '등', '등', '등', '등', '일', '등', '등', '등', '등', '일', '등', '등', '등', '등']
그 이유는 대괄호를 나열로 인식해서 일이나 등이나 .이나.을 찾아라로 인식한것 입니다.
그렇기에 대괄호 앞에 \ 를 사용해주어
"\[.등..\]" 이렇게!!
target_sentence = """
[일등박사]
[이등박사]
[삼등박사]
[사등박사]
(일등박사)
(이등박사)
(삼등박사)
(사등박사)
{일등박사}
{이등박사}
{삼등박사}
{사등박사}
"""
find_myName = re.compile("\[.등..\]")
re.findall(find_myName,target_sentence)
그 결과 바라는 바만 확인되었습니다!!
['[일등박사]', '[이등박사]', '[삼등박사]', '[사등박사]']
메타문자 활용 >> 공백 찾기
메타문자에는 다양한 케이스가 존재하는데요!!
공백찾기 케이스에 대하여 알아보겠습니다!
메타문자 | 뜻 |
\n | 줄바꿈 |
\t | 탭 |
[\b] | 역스페이스 |
\f | 페이지넘김 |
\v | 수직탭 |
\r | 캐리지 리턴 |
\s | 모든 공백 |
\S | 공백아닌 모든것 |
가장 이해하기 쉬운 줄바꿈 을 활용해봅시다!!
target_sentence = """
일등박사
이등박사
삼등박사
사등박사
일등박사~
이등박사~
삼등박사~
사등박사~
"""
find_myName = re.compile("..박사\n")
re.findall(find_myName,target_sentence)
그 결과 우리는 ~~ 박사이며 바로 줄바꿈이 된 아래의 결과를 볼 수 있었습니다
['일등박사\n', '이등박사\n', '삼등박사\n', '사등박사\n']
메타문자 활용 >> 숫자 찾기 / 영문 찾기
지난 포스팅에서 [0-9]를 통하여 모든 숫자를,
[a-z]를 통하여 문자를 찾을 수 있음을 배웠는데요!!
메타문자를 활용해도 가능합니다!!
메타문자 | 의미 |
\d | 숫자하나 [0-9] |
\D | 숫자를 제외한 문자하나 [^0-9] |
\w | 대소문자와 밑줄을 포함하는 영숫자 > 동일한것 [a-zA-Z0-9_] |
\W | 영어 숫자나 밑줄이 아닌 모든문자 > 동일한것 [^a-zA-Z0-9_] |
숫자가 아닌 모든문자를 찾아보자!!
target_sentence = """
일등박사
이등박사
삼등박사
사등박사
1등박사
2등박사
3등박사
4등박사
"""
find_myName = re.compile("\D등박사")
re.findall(find_myName,target_sentence)
그 결과!!
['일등박사', '이등박사', '삼등박사', '사등박사']
이번엔!
숫자 + 아무문자!! 를 찾아보자 "\d\w"
target_sentence = """
일등 1등 1s 일st 12
"""
find_myName = re.compile("\d\w")
re.findall(find_myName,target_sentence)
['1등', '1s', '12']
반복 찾기 >> "+" 활용하기
지금까지 배운내용을 바탕으로
이메일 주소를 찾으려면 어떻게해야할까?
\w@\w\.\w 를 한다면 ~@~.~ 가 된다!!
하지만,, 이것은 a@b.c 만 가능하지 aa@bb.cc 는 가능하지 않다
target_sentence = """
myid@abc.com
a@b.c
"""
find_myName = re.compile("\w@\w\.\w")
re.findall(find_myName,target_sentence)
['a@b.c']
(\w는 하나의 문자이기 떄문에!)
그때 우리는 + 를 활용하게 된다
\w+@\w+\.\w+ 와 같이 된다면 아이디부에 문자들 (/w+) 그리고 도메인부에 도 마찬가지가 된다
target_sentence = """
myid@abc.com
a@b.c
my.id@abc.com
"""
find_myName = re.compile("\w+@\w+\.\w+")
re.findall(find_myName,target_sentence)
이를 통해 여러 이메일주소를 찾을 수 있다.
['myid@abc.com', 'a@b.c', 'id@abc.com']
이에 더하여! 이메일에도 . 이 있는 경우도 (ex. my.id@abc.com)
완벽하게 잡아보쟈!!
그래서 한번 더 최종적으로 이메일을 찾는 정규표현식을 만들었다!
target_sentence = """
myid@abc.com
a@b.c
my.id@abc.com
"""
find_myName = re.compile("[\w.]+@\w+\.\w+")
re.findall(find_myName,target_sentence)
['myid@abc.com', 'a@b.c', 'my.id@abc.com']
있어도되고 없어도 되고 >> "?" 활용하기
있어도 되지만 없어도되는경우!!
대표적인 예로 홈페이지 주소이다!
https://drfirst.tistory.com/
http://drfirst.tistory.com/
위 두개의 주소가 있다. 이떄 s가 있어도 되고 없어도되는것을 어떻게 표한할 수있을까???
바로 "?" 이다!!
정규표현식 https?:/[\w./]+
을 본다면 s 뒤에 ? 가 있는데,
이로써 s가 있어도 되고 없어도 됨을 의미한다.
target_sentence = """
https://drfirst.tistory.com/
http://drfirst.tistory.com/
"""
find_myName = re.compile("https?:/[\w./]+")
re.findall(find_myName,target_sentence)
결과는 아래와 같다.
['https://drfirst.tistory.com/', 'http://drfirst.tistory.com/']
반복횟수 정하기 >> "{ } " 활용하기
날짜를 표현하는데는 다양한 유형이 존재합니다.
이러한 날짜 중 우리가 필요한 유형만 찾는 예시를 보아요!!
target_sentence = """
20220102
2022/01/02
2022-01-02
2022 01 02
02/01/2022
02-01-2022
02012022
"""
find_myName = re.compile("\d{4}-\d{2}-\d{2}")
re.findall(find_myName,target_sentence)
\d{4} 란 숫자(\d)가 4번 반복되는것을 찾으라는 뜻이었다.
결과는 아래와 같다.
['2022-01-02']
전화번호를 찾을때 많이 활용된다
우리가 찾으려는 번호가 010으로 시작하며 가운데는 3,4자리이고 마지막이 4자리인 수라면??
"010-\d{3,4}-\d{4}"
를 통하여!!
target_sentence = """
010-0000-0000
017-0000-0000
010-000-0000
010-000-000
017-000-000
017-0000-0000
"""
find_myName = re.compile("010-\d{3,4}-\d{4}")
re.findall(find_myName,target_sentence)
잘 찾아졌다!!
['010-0000-0000', '010-000-0000']
참고!!
위 내용은 "손에 잡히는 정규표현식" 을 참고로 작성하였습니다!^^
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=4342103
'데이터&AI' 카테고리의 다른 글
OpenAI의 ChatGPT가 예측한 비트코인의 미래 (feat Python) (0) | 2023.02.06 |
---|---|
정규표현식(regex, 레젝스) with 파이썬!! (3) - 예제 (0) | 2023.01.09 |
정규표현식(regex, 레젝스) with 파이썬!! (1) - 기본 (0) | 2023.01.07 |
이루다 문제점 찾아보자!!(feat. 노동운동 비하, 천황 존경??, 동북공정) (0) | 2022.09.02 |
네이버의 에러 발견!! (feat. 고성군) (0) | 2022.05.30 |
댓글