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

+ Recent posts