stock_results = re.findall("(\<dl class=\"blind\"\>)([\s\S]+?)(\<\/dl\>)", html_contents)
오늘 나를 애먹인 정규 표현식
<dl class="blind">와 </dl> 사이에 문자열(공백 포함)이 들어간 패턴을 찾는 코드인데 ([\s\S]+?) 이 부분이 이해가 잘 안 됐다.
\s : 공백 문자
\S : 공백이 아닌 문자열
[\s\S] : 공백을 포함한 모든 문자
+? : 최소 일치를 수행하여 가능한 한 적은 문자와 일치
이게 대체 무슨뜻인지 모르겠어서 위 표현식에 ?가 있는 경우와 없는 경우의 결과를 비교해봤다.
(\<dl class=\"blind\"\>)([\s\S]+?)(\<\/dl\>)
?를 붙였을 때 : <dl class="blind"> 다음에 나오는 </dl>중 가장 가까운 </dl>을 기준으로 자른다.
(\<dl class=\"blind\"\>)([\s\S]+)(\<\/dl\>)
?를 붙이지 않았을 때 : <dl class="blind"> 다음에 나오는 </dl>중 가장 먼 </dl>을 기준으로 자른다. 가장 마지막에 나오는 </dl>을 제외한 나머지 </dl>을 ([\s\S]+)에 포함시켜 버린다.
'Python' 카테고리의 다른 글
리스트 컴프리헨션으로 2*2 행렬의 곱 구하기 (0) | 2024.02.29 |
---|