문자? 는 문자가 0개 또는 1개인지 판단하고, 문자. 는 문자가 1개인지 판단하고 문자{1} 도 문자가 한개인지 판단하기 때문에
re.match('H.','HiHiHi')
re.match('H?','HiHiHi')
re.match('H{1}','HiHiHi')
는 모두 아무것도 반환되지 않아야 하지 않나요? 직접 해보니 매치 객체가 반환됩니다ㅠㅠ
또 문자* 는 문자가 0개 이상 있는지 판단하는데 0개 이상이면 문자가 없을 때와 있을 때 모두를 포함하는데 *을 사용하는 이유는 무엇인가요? *를 사용하면 항상 매치 개체가 반환되지 않나요?
일치하는 게 있으면 일치한 결과를 Match 객체로 반환합니다.
결과에 re.Match object는 Match 객체입니다.
?는 앞 패턴이 없거나 하나여야 합니다.
>>> re.match('h', 'abcdefghijklmnopqrstuvxyz')
이렇게 하면 일치하는 결과가 없습니다.
>>> re.match('h', 'h abcdefghijklmnopqrstuvxyz')
<_sre.SRE_Match object; span=(0, 1), match='h'>
이렇게 하면 첫 번째에 h가 있으니 패턴을 발견했다고 하죠.
>>> re.match('h?', 'abcdefghijklmnopqrstuvxyz')
<_sre.SRE_Match object; span=(0, 0), match=''>
>>>
?는 앞 패턴이 없거나 하나이어야 합니다. span=(0, 0)이고 match=''이니 패턴이 없다는 결과를 반환합니다.
이런 식으로 하나씩 테스트해보면 됩니다.
?는 앞 패턴이 없거나 1개이어야 합니다.
+는 앞 패턴이 1개 이상이어야 하고,
*는 앞 패턴이 0개 이상이어야 합니다.
\d?는 숫자가 없거나 1개여야 합니다.
\d+는 숫자가 1개 이상이어야 합니다.
\d*는 숫자가 없거나 1개 이상이어야 합니다.
전체를 다양하게 테스트해보면 됩니다.