机芯搜索和替换,但保持单个字符

时间:2018-08-18 16:40:11

标签: regex calibre

我正在尝试删除许多

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

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

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

但是,我当然需要用以前的字母替换成小写字母。是否有一种整洁的方法来执行此操作,或者我需要为此编写自己的正则表达式功能?

2 个答案:

答案 0 :(得分:0)

您正在寻找positive lookahead

搜索</p><p[^>]*>(?=[a-z]),并将其替换为[empty string]

(?=[a-z])确保只有在后跟小写字母时才匹配,但不会消耗该字母,仅删除</p><p[^>]*>部分。

答案 1 :(得分:0)

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

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

我本来以为(</p>会包含换行符(\n),但是直到Calibre才匹配,直到我添加了换行符。

感谢法比安(Fabian)关于积极前瞻的观点;正是我所需要的。