【问题标题】:calibre search & replace but maintain a single character口径搜索和替换但保持单个字符
【发布时间】:2018-08-18 16:40:11
【问题描述】:

我正在尝试删除许多

</p><p class="calibre1">

但仅当此字符串后紧跟 Calibre 中的小写字母时。将其替换为 '' 后跟小写字母。 (当有大写字母或数字或其他任何东西时,字符串应该保留......) 在正则表达式,区分大小写的模式下,我可以使用这个正则表达式轻松找到这些字符串:

</p><p[^>]*>[a-z].....

但是,我当然也需要将小写字母替换为以前的字母。有没有一种巧妙的方法可以做到这一点,或者我需要为此编写自己的正则表达式函数吗??

【问题讨论】:

    标签: regex calibre


    【解决方案1】:

    您正在寻找positive lookahead

    搜索&lt;/p&gt;&lt;p[^&gt;]*&gt;(?=[a-z]) 并将其替换为[empty string]

    (?=[a-z]) 确保它仅在后跟小写字母时匹配,但它不消耗所述字母,仅删除 &lt;/p&gt;&lt;p[^&gt;]*&gt; 部分。


    更新:你可能会遇到换行符的问题,在这种情况下请查看@AFK's answer

    【讨论】:

    • 法比安-完美!!谢谢!
    • @ToniE 很高兴为您提供帮助,如果此答案解决了您的问题,请考虑接受:meta.stackexchange.com/a/5235/332983
    • &lt;/p&gt;&lt;p[^&gt;]*&gt;([a-z])捕获字符然后用$1代替空字符串不是更容易吗?
    • @Robert 当然,你也可以这样做,前瞻在语义上更接近我想要做的:找到一个字符串并删除它。我承认,如果您不熟悉它们或使用不支持它们的正则表达式引擎,可能会使事情变得更加混乱。除此之外,这只是个人喜好,因为我不必在脑海中分析会发生什么,我可以阅读它。
    【解决方案2】:

    我在 Calibre 中使用 @Fabian N. 的解决方案在将 PDF 转换为 EPUB 文件后进行清理。我必须通过在一行末尾的结束段落标记和下一行开头的后续开始标记之间添加一个换行符(例如,\n)来进行一些修改,如下所示:

    </p>\n<p class="calibre1">(?=[a-z])
    

    我原以为 (&lt;/p&gt;) 会包含换行符 (\n),但在我添加换行符之前它在 Calibre 中不匹配。

    感谢 Fabian 对积极前瞻性的介绍;正是我需要的。

    【讨论】:

      猜你喜欢
      • 2020-01-14
      • 1970-01-01
      • 2023-04-06
      • 2013-03-08
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      相关资源
      最近更新 更多