이제 파이썬 코드는 제일 위 한 번만 적겠다..!
나에겐 의미가 없기에...
\d
는 숫자를 한 글자만 찾는다.
+
는 '하나 혹은 그 이상 연결된' 이란 뜻이다.
즉, \d+
는 '하나 혹은 그 이상 연결된 숫자`이다.
# 정규표현식
regex = r'\d+'
# 주소록
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)
# 출력
['02', '123', '4567', '070', '9999', '9999', '010', '2454', '3457'
붙어 있는 숫자끼리 출력되는 것을 확인할 수 있다...!!
*
은 '0개 이상'이란 뜻이다.
\d*
은 '숫자가 0개 이상'이란 뜻이다.
[1-9]\d*
을 하면 '1~9 사이의 숫자 0개 이상'을 뜻한다!
# 정규표현식
regex = r'[1-9]\d*'
# 주소록
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'''
# 출력
2
123
4567
70
9999
9999
10
2454
3457
전화번호는 =
를 포함하거나, 포함하지 않을 수 있다.
021234567
이나 02-123-4567
처럼.
연속된 3~4개 숫자 사이에 -
가 있거나 없거나.
?
는 '있거나 없거나' 란 뜻이다.
-?
는 '-
가 있거나 없다.' 란 뜻이 된다.
# 정규표현식
regex = r'\d+-?\d+-?\d+'
# 주소록
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'''
# 출력
['02-123-4567', '070-9999-9999', '010', '2454', '3457']
하지만 위 표현식은 010 1234 5678
같은 번호는 찾을 수 없다...
'-
가 있거나 없다.'의 조건이 아니라,
'-
또는 공백이 있거나 없다.'를 사용해야 한다...!
# 정규표현식
regex = r'\d+[ -]?\d+[ -]?\d+'
# 주소록
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'''
# 출력
['02-123-4567', '070-9999-9999', '010', '2454', '3457']
여기까지하니 슬슬 감이 온다...ㅎㅎㅎ
앞서 사용한 정규표현식은 숫자가 많이 연결되어있어도 전화번호로 인식한다...
# 정규표현식
regex = r'\d+[- ]?\d+[- ]?\d+'
# 주소록
search_target = '''이상한 전화번호 0030589-5-95826
Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
# 출력
['0030589-5-95826', '02-123-4567', '070-9999-9999', '010 2454 3457']
{숫자}
는 '숫자
번 반복한다.' 는 뜻이다.
\d{2}
는 '숫자가 연속 두 번 나온다.'는 뜻이 된다.
# 정규표현식
regex = '\d{2}[ -]?\d{3}[ -4]?\d{4}'
# 주소록
search_target = '''이상한 전화번호 0030589-5-95826
Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
# 출력
['02-123-4567']
출력만 봐도 알다시피 010 ~
은 인식 못한다...
{숫자1, 숫자2}
는 '숫자1 ~ 숫자2
까지 반복한다.'는 뜻이다.
\w{2,3}
는 '문자가 2~3번 나온다.'는 뜻이다.
# 정규표현식
regex = '\d{2,3}[ -]?\d{3,4}[ -]?\d{4}'
# 주소록
search_target = '''이상한 전화번호 0030589-5-95826
Luke Skywarker 02-123-4567 luke@daum.net
다스베이더 070-9999-9999 darth_vader@gmail.com
princess leia 010 2454 3457 leia@gmail.com'''
# 출력
['02-123-4567', '070-9999-9999', '010 2454 3457']