【问题标题】:Searching for text in html using python使用python在html中搜索文本
【发布时间】:2018-11-28 17:49:19
【问题描述】:

我有一个电子书阅读器,它不会将突出显示的注释导出到 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】:

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

    【讨论】:

    • 恐怕这是我搜索之后会做的替换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2014-08-17
    • 2014-10-13
    • 2020-07-26
    • 1970-01-01
    相关资源
    最近更新 更多