0

在提取包含多标签的多行标签时需要帮助。例如:

<div class="box_update_userdetails_upate">50% discount 4 our members for the items that r put 4 sale.<br />
Send<br />
Join 4sale<br />
9219592195</div>

<div class="box_update_userdetails_upate">Big Offr 4 Our Grp MemBrs:<br />
Jst Add Ur 5 Frns and Gain a Recharge Of 20rs In ur Mob no.<br />
Details<br />
9496360235<br />
addfrn</div>

数据中可能有很多
或换行符。我需要提取所有写在两者之间的任何内容<div class="box_update_userdetails_upate"></div>包括 all<br />或 except<br />也可以完成工作。

我尝试使用"<div class="box_update_userdetails_upate">(.+?)</div>",但这并不适用于所有人。只有在 .. 之间没有换行符或中断标记时,这种方式才有效。

4

2 回答 2

0

要在这里引用一个著名的答案,使用正则表达式来解析 html 是很糟糕的。

def extract(starttag, endtag, text):
    ret = re.compile(r'{a}(.*){b}'.format(a=starttag,b=endtag), re.IGNORECASE).search(text).group(1)
    return ret

这应该处理多个 div 标签,但是它将在输出中包含 div 标签的下一个实例,但是一个简单的替换就可以解决这个问题

于 2013-09-13T05:13:50.843 回答
0

我想你正在寻找的是这个。

"<div class=\"box_update_userdetails_upate\">(.|\n)*</div>"

中间的组将匹配两个 div 之间的所有字符。您的主要问题是.在 Python 正则表达式中通常不匹配换行符。请注意,如果您有一个嵌套的 div,例如<div>...<div>...</div>...</div>,该*运算符是贪婪的,因此它将捕获尽可能多的文本。换句话说,它将一直运行到</div>它能够找到的最后一个。

于 2013-09-12T19:40:03.753 回答