根据位置将字符串过滤到列表中 - Python

时间:2013-09-12 11:44:23

标签: python html regex

例如,这是我的字符串:

myString = "<html><body><p>Hello World!</p><p>Hello Dennis!</p></body></html>"

我想要实现的是:

myList = ['Hello World!','Hello Dennis!']

使用正则表达式或其他方法,如何在忽略html标记以实现myString的同时从myList中过滤掉段落文本?

我试过了:

import re
a="<body><p>Hello world!</p><p>Hello Denniss!</p></body>"
result=re.search('<p>(.*)</p>', a)
print result.group(1)

结果导致:Hello world!</p><p>Hello Denniss!当我尝试(.*)(.*)时,我得到Hello World!

这个字符串只是一个例子。该字符串也可能是<garbage>abcdefghijk<gar<bage>,具体取决于Web开发人员如何对网站进行编码。

这可能是一个复杂的正则表达式,但我需要了解这一点,因为它将用于我将参加今年晚些时候的网络安全竞赛,我认为最好的办法是开发一种算法,在{ {1}}和>

我该怎么做?

很抱歉,如果我的问题格式不正确,我会遇到一些学习问题。

2 个答案:

答案 0 :(得分:1)

您想删除html文字中的所有代码吗?我不会选择正则表达式,更好的其他方法,例如使用BeautifulSoup,你会在黑客会议上给所有人带来惊喜:

from bs4 import BeautifulSoup

myString = "<html><body><p>Hello World!</p><p>Hello Dennis!</p></body></html>"

myList = list(BeautifulSoup(myString).strings))

它产生:

['Hello World!', 'Hello Dennis!']

答案 1 :(得分:1)

使用正则表达式进行HTML解析绝对是limited,但如果您想要真正的HTML挖掘解决方案,请尝试查看此插件BeautifulSoup

至于你的正则表达式,asterisk量词是贪婪它会一直gorge直到</p>的最后一个。因此,您应该使用(?=XXX)命令,这意味着搜索,直到找到XXX

尝试以下方法:

re.findall(r'<p>(.*?)(?=</p>)', s)