Sigil 编辑器:用于在文本中查找(连字符)字符的正则表达式字符串,而不是 html 属性

Sigil editor: Regex string to look for a (hyphen) character in text, but not html attributes

我的问题: 我使用 Sigil 编辑电子书的 xhtml 个文件。

从 InDesign 导出到 ePub 时,我勾选选项以删除强制换行符。 此操作删除了 InDesign 自动生成的所有 - 连字符,但在我的分词微调期间手动添加的字符保留在文本中。 Sigil 搜索的当前能力:按 - 搜索会解析所有内容,包括 css class 名称。

TODO: 如何构造在文本中找到 - 但在 html 代码中找不到的正则表达式查询? 谢谢!


我已经尝试过的:https://www.mobileread.com/forums/showpost.php?p=4099971&postcount=169

这是一个简单的示例,用于在标签本身中查找单词“title”not,这是我能想到的最简单的正则表达式搜索。它假定 body 标签中没有纯文本并且 xhtml 格式正确。

我试过了,似乎有效。可能有更好更详尽的正则表达式,甚至可以处理损坏的 xhtml.

代码:

title(?=[^>]*<)

这基本上是说搜索“title”,但在找到下一个开始标记字符“<”之前先行确保没有结束标记字符“>”。

可能有一些可以使用反向逻辑的版本。还有一些方法可以使用正则表达式来查找忽略任何中间标记的两个字符串。

试一试。您可以轻松地添加保存的搜索来做到这一点。但同样,它不会处理跨元素(跨树中的节点)的文本的查找和替换。这是困难的部分,除非您将匹配子串与替换子串进行一对一对应匹配,而通常情况下不需要这样。

当然,如果您在字符串中使用 &lt;&gt; 来显示“标签”或代码片段,这些将被错误地找到,因此在需要替换之前检查每个发现.

Sigil中,使用了PCRE正则表达式引擎。

因此,您可以使用

<[^<>]*>(*SKIP)(*F)|-

参见regex demo

详情:

  • <[^<>]*>(*SKIP)(*F) - 匹配 <,除 <> 之外的零个或多个字符,然后是 >,然后跳过匹配和继续从失败发生的位置开始搜索下一个匹配项
  • | - 或
  • - - 一个连字符。

注意:您可能希望将任何破折号与 [\p{Pd}\x{00AD}] 匹配(替换为 -)。