使用python在html中搜索文本

问题描述 投票:2回答:1

我有一个电子书阅读器,不会将突出显示注释导出到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中有一个库例程吗?

python string search replace
1个回答
0
投票

你可以使用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> 
© www.soinside.com 2019 - 2024. All rights reserved.