使用python搜索html中的文本

2024-05-14 00:25:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个电子书阅读器,它不会将突出显示的注释导出到epub文件中,所以我要编写一个Sigil插件,从阅读器中导入注释并将它们放入epub文件中,这样我就可以在桌面计算机上阅读它了。你知道吗

最简单的方法是对python中的字符串使用replace方法:

for html_id, href in bk.text_iter():
    # read orignal html code from file
    original_html = bk.readfile(html_id)
    # modify html code
    modified_html = original_html.replace('Every issue that comes up', '<span class="highlight">Every issue that comes up</span>')

但这里有一个警告:我查找的字符串可能是电子书阅读器上的连续文本,但可能在底层html文件中包含html标记。你知道吗

我想首先碰到这个问题的不是我:有没有一个名字和一个方法来搜索这样的约束?在一个文件中得到一个字符串或位置的列表是很有用的,这些字符串或位置加起来就是原始文本。你知道吗

示例:

<ul>
 <li>Alfa Romeo</li>
 <li>Mercedes</li>
 <li>Volkswagen</li>
</ul>

我在电子书阅读器中突出显示了列表,所以我搜索

Alfa Romeo Mercedes Volkswagen

我的搜索函数将返回一个包含html文件中位置的列表,这样我就可以向每个位置添加span标记。你知道吗

<ul>
 <li><span class="highlight">Alfa Romeo</span></li>
 <li><span class="highlight">Mercedes</span></li>
 <li><span class="highlight">Volkswagen</span></li>
</ul>

这种允许在途中插入html标记和空格的搜索类型是什么?python中是否有用于此的库例程?你知道吗


Tags: 文件方法字符串标记列表htmlli电子书
1条回答
网友
1楼 · 发布于 2024-05-14 00:25:46

您可以使用re

import re
def highlight(text, keywords, _class='highlight'):
   return re.sub('|'.join(keywords), lambda x:f"<span class='{_class}'>{x.group()}</span>", text)

s = """
<ul>
 <li>Alfa Romeo</li>
 <li>Mercedes</li>
 <li>Volkswagen</li>
</ul>
"""
print(highlight(s, ['Alfa Romeo', 'Mercedes', 'Volkswagen']))

输出:

<ul>
 <li><span class='highlight'>Alfa Romeo</span></li>
 <li><span class='highlight'>Mercedes</span></li>
 <li><span class='highlight'>Volkswagen</span></li>
</ul> 

相关问题 更多 >