[英]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.