Python多线+多标签正则表达式 - 需要解决方案

时间:2013-09-12 19:18:12

标签: python regex

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

<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>之间的所有内容,包括所有<br /><br />以外的内容。

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

2 个答案:

答案 0 :(得分:0)

我认为你在寻找的是这个。

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

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

答案 1 :(得分: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标签的下一个实例,但是一个简单的替换会处理这个