강의로 돌아가기
YOONTAEJUN

?조건에 해당하지 않으면 ? 다음의 처리는 실행되지 않는 건가요??

정규식 [\d+-?\d]로 실행해보니
-이 붙어 있는 번호는 ['070-9', '999-9, '999'']처럼 실행이 되는데
공백으로 이어져 있는 번호는 ['010', '2454', '3457']와 같이 결과가 나와서
[\d+]까지만 실행되고 [?]에 해당하는 조건 [-] 가 없으니 [?]다음의 [\d]는 실행되지 않고
다시 처음부터 [\d+-?\d]를 실행하는 것이 맞는건가요??

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
# 빈칸에 정규표현식을 적습니다.
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'''

#아래 부분은 본 강의에서 다루지 않습니다.
import re
result=re.findall(regex,search_target)
print(result)
  • YOONTAEJUN
    작성중인 코드에는 regex = r'\d+-?\d+-?\d+'와 같이 나와 있지만 실제 실행한 구문은 regex = r'\d+-?\d입니다. YOONTAEJUN 2019.03.02 15:57
1 개의 답변
Demi

-?-가 있어도 없어도 된다는 뜻입니다.
따라서 \d+-?\d\d+-\d\d+\d를 모두 포함하는 말이지요. 이때 후자, \d+\d\d+와 같은 의미이므로 \d+라고 생각하셔도 무방합니다. 따라서

1. 070-9999-9999가 주어졌을때

\d+: 070 까지를 포함
-?: - 까지를 포함
\d: 그 뒤의 9를 포함

이런식으로 진행이 되고요.

2. 010 2454 3457가 주어졌을 때

이 구문에는 -가 없으니, \d+\d와 같은 형태로 해석이 될걱고요. 앞서 말했듯, \d+\d\d+와 같기 때문에, 010 까지만 인식이 됩니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.