https://programmers.co.kr/learn/courses/11/lessons/539
정규표현식 - 0개 이상
정규표현식으로 010, 123, 456 중 자연수를 찾으려면 어떻게 해야 할까요? 자연수는 0으로 시작하지 않으니 자연수의 첫자리는 반드시 1 ~ 9 중에 하나이어야 합니다. 그다음 자리부터는 0~9 사이의
programmers.co.kr
Part1. 전화번호 찾기
1. 문자열 속에서 전화번호를 찾아보세요
re.findall() : 문자열 속에서 정규식과 매칭되는 것들을 모두 찾아 리스트로 반환해주는 함수
#전화번호를 찾는 정규(표현)식 0\d{1,2}[ -]?\d{3,4}[ -]?\d{3,4}
0 : 숫자 0
\d{1,2} : 숫자가 1개~2개
[ -]? : 빈칸 또는 -가 0개~1개
\d{3,4} : 숫자가 3개~4개
[ -]? : 빈칸 또는 -가 0개~1개
\d{3,4}' : 숫자가 3개~4개
#정규표현식과 일치하는 부분을 모두 찾아주는 파이썬 코드입니다.
import re
result = re.findall(regex, search_target)
result
print("\n".join(result))
2. 숫자만 추출하고 싶을때는?
# \d : 숫자
# 빈칸에 정규표현식을 적습니다.
regex = '\d'
# 주소록입니다. 이후 강의에서 모두 이 search_target을 사용합니다.
search_target = '''Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
# 정규표현식과 일치하는 부분을 모두 찾아주는 파이썬 코드입니다.
import re
result = re.findall(regex, search_target)
print(result)
3. 문자만 추출하고 싶을때는?
# \w : alphanumeric(문자+숫자)
# 빈칸에 정규표현식을 적습니다.
regex = '\w'
# 주소록입니다. 이후 강의에서 모두 이 search_target을 사용합니다.
search_target = '''Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
# 정규표현식과 일치하는 부분을 모두 찾아주는 파이썬 코드입니다.
import re
result = re.findall(regex, search_target)
print(result)
4. 연결된 숫자를 찾고 싶을 때는?
# X+ : X가 무조건 출현, 한번 이상 출현
# \d+ : 숫자가 한 번 이상 출현
# 빈칸에 정규표현식을 적습니다.
regex = '\d+'
5. 자연수만 추출하고 싶을때는?
# *은 "0개 이상"이라는 뜻입니다. 따라서 \d*는 "숫자가 0개 이상이다"를 의미합니다.
이를 이용하면 자연수는 [1-9]\d*로 표현할 수 있습니다.
[1-9] : 문자열은 무조건 1-9 사이 숫자로 시작한다.
\d* : 그 뒤에 숫자가 0번 이상 등장한다.
regex = '[1-9]\d*'
6. -가 들어있는 전화번호 추출(숫자 중간중간에 -가 두 번 나타남)
# X? : X가 0번 또는 1번 출현
# 전화번호는 "-"을 포함하거나, 포함하지 않을 수 있습니다.
regex = '\d+-?\d+-?\d+'
\d+ : 숫자가 무조건 출현. 1번 이상 출현
-? : -가 0번 또는 1번 출현
\d+ : 숫자가 무조건 출현. 1번 이상 출현
-? : -가 0번 또는 1번 출현
\d+ : 숫자가 무조건 출현. 1번 이상 출현
7. - 또는 공백이 포함된 전화번호 추출하기
# 앞에서 배운 \d+-?\d+-?\d+ 정규표현식은
"010 2454 3457"과 같이 공백이 포함된 전화번호를 찾을 수 없지요.
# 모든 전화번호를 찾으려면
"-가 있거나 없다"는 조건이 아니라
"- 또는 공백이 있거나 없다"는 조건을 써야 합니다.
regex = '\d+[- ]?\d+[- ]?\d+'
\d+ : 숫자가 무조건 출현. 1번 이상 출현
[- ]? : - 또는 공백이 0번 또는 1번 출현
\d+ : 숫자가 무조건 출현. 1번 이상 출현
[- ]? : - 또는 공백이 0번 또는 1번 출현
\d+ : 숫자가 무조건 출현. 1번 이상 출현
8. 숫자 갯수 지정해서 전화번호 추출
regex = '\d{2,3}[- ]?\d{3,4}[- ]?\d{3,4}'
\d{2,3} : 숫자가 2개 또는 3개
[ -]? : 빈칸 또는 -가 0개~1개
\d{3,4} : 숫자가 3개 또는 4개
[ -]? : 빈칸 또는 -가 0개~1개
\d{3,4} : 숫자가 3개 또는 4개
Part2. 문자열
9. 알파벳 중에 소문자 모음(a,e,i,o,u)만 고르고 싶을 땐
regex = '[aeiou]'
search_target = '''Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
# 정규표현식과 일치하는 부분을 모두 찾아주는 파이썬 코드입니다.
import re
result = re.findall(regex, search_target)
result
10. 소문자 알파벳만 고르고 싶을 땐
[xㅡy] : x부터 y까지 범위에 해당하는 것 전부 추출
regex = '[a-z]'
search_target = '''Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
# 정규표현식과 일치하는 부분을 모두 찾아주는 파이썬 코드입니다.
import re
result = re.findall(regex, search_target)
print(result)
11. 연속된 영어 소문자를 찾으려면
regex = '[a-z]+'
12. 연속된 알파벳(영어 소문자, 대문자)를 찾으려면
regex = '[a-zA-Z]+'
13. 연속된 한글 단어를 찾으려면 어떻게 할까요?
regex = '[가-힣]+'
14. 이메일주소를 찾아봅시다.
regex = '[a-z_]+@[a-z]+.[a-z]+'
[a-z_]+ : 영어 소문자 a-z 또는 _가 한 번 이상 등장
@ : @ 등장
[a-z]+ : 영어 소문자 a-z가 한 번 이상 등장
. : . 등장
[a-z]+ : 영어 소문자 a-z가 한 번 이상 등장
15. 문자열 이외의 특수문자를 찾아봅시다
\s : 공백 문자(스페이스, 탭, 뉴라인)
\S : 공백 문자를 제외한 문자
\d : 숫자
\D : 숫자를 제외한 모든 문자
\w : alphanumeric(문자+숫자)
\W : non-alphanumeric(문자 및 "_" 제외한 특수문자, 공백 등)
'코딩?' 카테고리의 다른 글
정규표현식_연습_regexone_practice (0) | 2022.01.03 |
---|---|
정규표현식 정리 + 예제 (0) | 2022.01.03 |
코딩의 []자도 모르는 자, 스파르타 코딩클럽 코딩 용어 해설 (0) | 2021.12.19 |
초보자인 나를 위한 파이썬(Python) 기초_파이썬 시작, 변수 (0) | 2021.12.18 |