我想從包含具有Python正則表達式的特定值的單元格的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>
據我所知,非貪婪?在這種情況下不起作用,因爲回溯工作原理。我擺弄負面的向後看和前瞻,但無法讓它工作。
有人有建議嗎?
我知道像美麗湯等解決方案,但問題是關於理解正則表達式,而不是問題本身。
解決人們關於不使用HTML正則表達式的問題。普遍的問題我想用正則表達式來解決不僅是從
response = '''0randomstuffA1randomstuff10randomstuffA2randomstuff10randomstuffB3randomstuff10randomstuffB4randomstuff10randomstuffB5randomstuff1'''
得到輸出
0randomstuffB3randomstuff1
0randomstuffB4randomstuff1
0randomstuffB5randomstuff1
和randomstuff應該被解釋爲隨機字符串(但含有0沒有或1)。
如果您的問題不是關於HTML,也許你不應該包括HTML例子(他們不應該用正則表達式解析) –
任何特別的原因在這裏使用re.DOTALL? –
真正的問題需要re.DOTALL。 – user2940666