繁体   English   中英

使用python搜索html中的文本

[英]Searching for text in html using 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中有一个库例程吗?

您可以使用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> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM