1

例如,这是我的字符串:

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

我想要实现的是:

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

使用正则表达式或其他方法,我如何过滤掉段落文本,myString同时忽略 html 标签来实现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 开发人员如何对网站进行编码。

这可能是一个复杂的正则表达式,但我需要学习这一点,因为这是我将在今年晚些时候参加的网络安全竞赛,我认为我最好的选择是开发一种在 a>和 a之间搜索文本的算法<

我该怎么办?

抱歉,如果我的问题格式不正确,我有一些学习问题。

4

2 回答 2

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!']
于 2013-09-12T11:53:54.413 回答
1

使用正则表达式进行 HTML 解析肯定是有限的,但是如果您想获得真正的 HTML 挖掘解决方案,请尝试查看这个插件BeautifulSoup

至于您的正则表达式,asterisk量词是贪婪的,它会吞噬直到</p>. 所以,你应该使用(?=XXX)命令,这意味着搜索直到找到 XXX

尝试以下操作:

re.findall(r'<p>(.*?)(?=</p>)', s)
于 2013-09-12T11:54:02.690 回答