점프 투 파이썬, 종합문제 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 오후

빠른 답변 감사드립니다. 제가 소비되지 않는다는 의미를 조금 모호하게 이해하고 있었나 봅니다. 그냥 결과에만 안나오는 줄 알았는데 탐색 대상에서도 그대로 남이 있어서 뒤에 나오는 구문에서도 매치여부의 검토대상이 되는 것 같네요. 이제 명확히 이해하였습니다. 감사합니다. - 으흐흐님, 2021년 4월 22일 6:23 오후 추천 , 대댓글