提问人:BenMyr 提问时间:9/19/2018 更新时间:9/19/2018 访问量:31
带有正则表达式的自定义 HTMLParser 未正确返回
Custom HTMLParser with regex not returning correctly
问:
我正在开发一个程序,该程序根据不同的正则表达式从 HTML 文件中抓取一些信息。我遇到了以下代码的错误
我的 HTMLParser 子类:
class MyHtmlParser(HTMLParser):
def __init__(self):
self.reset()
self.title = []
def handle_data(self, d):
Result = re.search(r'ANMELDELSE .*(?=</b>)',d)
if Result:
self.title.append(Result.group(0))
def return_data(self):
return self.title
运行代码:
with open(r'....', "r") as f: #correct path to local test.html
page = f.read()
parser.feed(page)
parser.return_data()
现在 HTML 文件真的很乱,而且是挪威语,但这里有一个应该触发它的子集
<p style="margin: 0cm 0cm 0pt;"><span style="text-decoration: underline;">Sak 428/18-123, 03.09.2018 </span></p>
<p style="margin: 0cm 0cm 0pt;"><b> </b></p>
<p style="margin: 0cm 0cm 0pt;"><b>ANMELDELSE FOR TRAKASSERING</b></p>
这应该选择“ANMELDELSE FOR TRAKASSERING”,它在 https://regex101.com/ 和 https://regexr.com/ 中都如此,但是在执行代码时,我得到的只是一个空列表。该代码已与以前的正则表达式调用一起使用,所以我有点迷茫。
希望有人能帮忙!
答:
1赞
Wiktor Stribiżew
9/19/2018
#1
假设您的文本仅在某个文本节点中,您可以使用ANMELDELSE
r'ANMELDELSE[^<>]*'
原始模式包含文本正则空格 ()。通常使用不间断空格来代替该空格,以确保下一个单词在文本编辑器/查看器中保持在同一行上。\x20
为了匹配它,您可以使用修饰符并将其传递给您的方法(这是必需的,因为您使用的是 Python 2.7),但由于您想匹配到标签的末尾,因此只需使用否定字符类,除 和 之外的任何 0+ 字符。\s
re.U
re.search
[^<>]*
<
>
评论
r'ANMELDELSE[^<>]*
d
handle_data(self, d)
\u00A0
字符,与常规空格非常相似。