代码之家  ›  专栏  ›  技术社区  ›  Gergely

使用python在html中搜索文本

  •  2
  • Gergely  · 技术社区  · 8 年前

    我有一个电子书阅读器,它不会将突出显示注释导出到epub文件中,所以我要编写一个 Sigil 插件,从阅读器导入注释并将其放入epub文件中,以便我可以在桌面计算机上读取它。

    天真的做法是使用 replace python中字符串的方法:

    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中有这个库的例程吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Ajax1234    8 年前

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