점프 투 파이썬, 종합문제 20번 전방탐색 관련
안녕하십니까.
점프 투 파이썬을 통해 공부를 하다가 의문사항이 생겨서 글을 남깁니다.
종합문제 20번을 보면 전방탐색을 이용하는데요.
전방탐색을 하면 매칭은 되지만 결과값에 전방탐색에 해당하는 문구가 나오지 않는 걸로 알고 있습니다.(소비되지 않음)
아래가 문제의 풀이인데요.
import re
pat = re.compile(".*[@].*[.](?=com$|net$).*$")
print(pat.match("[email protected]"))
print(pat.match("[email protected]"))
print(pat.match("[email protected]"))
제가 group() 함수를 사용하여 매칭된 결과를 보면 아래와 같이 "com"이 그대로 나옵니다.
전방탐색을 이용하면 'com'이 결과에 나오면 안되는게 맞을 것 같은데 왜 결과가 이렇게 나오는지 궁금합니다.
결과가 이렇다면 전방탐색을 쓰지 않고 그냥 com$|net$ 을 이용하는 것과 동일한 결과가 아닌가요?
제가 뭔가 잘못이해하고 있는 것 같은데 가름침 부탁드립니다.
pat = re.compile(".*[@].*[.](?=com$|net$).*$")
>>> print(pat.match("[email protected]"))
<re.Match object; span=(0, 16), match='[email protected]'>
>>> a=pat.match("[email protected]")
>>> a.group()
'[email protected]'
감사합니다.
으흐흐 님 564
M 2021년 4월 22일 1:43 오후
1개의 답변이 있습니다. 1 / 1 Page
안녕하세요.
pat = re.compile(".*[@].*[.](?=com$|net$).*$") 구문에서 (?=com$|net$) 부분이 말씀하신데로 소비되지 않기 때문에 검색결과에 제외되는건 맞습니다. 하지만 그 바로뒤에 있는 .*$에 의해 com 또는 net이 매치되기 때문에 group 으로 조회시 포함되어 나오게 됩니다.
여기서 긍정형 전방 탐색을 사용한 이유는 검색결과에서 제외시키려는 목적이 아닌 com 또는 net과 일치하는 것만을 찾기 위해 사용되었습니다.
박응용 님
2021년 4월 22일 1:50 오후