파이썬에서 정규 표현식으로 특정 값을 포함하는 셀이있는 HTML 테이블의 행을 구문 분석하려고합니다. 이 (고안된) 예제의 목표는 "암소"로 행을 얻는 것입니다. 내 목표는 얻을 수 있지만정규 표현식과의 복잡한 욕심없는 일치
import re
response = '''
<tr class="someClass"><td></td><td>chicken</td></tr>
<tr class="someClass"><td></td><td>chicken</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
'''
r = re.compile(r'<tr.*?cow.*?tr>', re.DOTALL)
for m in r.finditer(response):
print m.group(0), "\n"
내 출력은
<tr class="someClass"><td></td><td>chicken</td></tr> <tr class="someClass"><td></td><td>chicken</td></tr> <tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
이다
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
<tr class="someClass"><td></td><td>cow</td></tr>
는 그 비 욕심을 이해? 이 경우에는 역 추적이 작동하는 방식 때문에 작동하지 않습니다. 나는 부정적인 lookbehinds와 lookahead로 주변을 들먹 였지만 작동시키지 못했습니다.
아무나 제안 사항이 있습니까?
나는 Beautiful Soup 등의 솔루션을 알고 있지만 문제는 정규 표현식을 이해하는 것이지 문제 자체는 아닙니다.
HTML에 정규 표현식을 사용하지 않는다는 사람들의 우려를 해결합니다. 내가 정규식을 사용하여 해결하려는 일반적인 문제는 출력
0randomstuffB3randomstuff1
0randomstuffB4randomstuff1
0randomstuffB5randomstuff1
및 randomstuff 임의의 문자열로 해석되어야한다 (하지만 0을 포함 또는 1)을
response = '''0randomstuffA1randomstuff10randomstuffA2randomstuff10randomstuffB3randomstuff10randomstuffB4randomstuff10randomstuffB5randomstuff1'''
에서 얻을 수 있습니다.
귀하의 질문에 HTML에 대해없는 경우, 아마 당신은 (그들이 정규 표현식으로 해석해서는 안) HTML 예제를 포함하지 않아야 –
여기 re.DOTALL을 사용하는 어떤 특별한 이유? –
실제 문제에는 re.DOTALL이 필요했습니다. – user2940666