例如,这是我的字符串:
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}}和>
。
我该怎么做?
很抱歉,如果我的问题格式不正确,我会遇到一些学习问题。
答案 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)