ReedenReeden
阅读与排版/内容替换

正则替换示例

删广告行、网址、空格、方括号、作者的话,让对话独立成段、去掉标题编号等正则替换示例。

使用前提醒

正则替换适合处理“格式有规律,但文字不完全相同”的内容。

它也更容易误伤正文。第一次使用时,建议:

  1. 先限定到当前书籍或当前章节
  2. 先保留替换前后的对照
  3. 检查命中结果
  4. 确认无误后再扩大范围

删除固定广告行

如果广告行有固定开头,可以匹配整行:

^.*广告关键词.*$

替换为空即可隐藏这类行。

如果开启了多行匹配,要特别确认不会把广告行前后的正文一起吃掉。

删除固定网址

匹配常见网址:

https?://\S+

适合清理章节中反复出现的网址。替换为空后,建议检查标点和空格是否还自然。

合并多余空行

把连续多个空行压缩成一个空行:

\n{3,}

替换为:


不同系统的换行可能略有差异。如果没有命中,可以先尝试只处理当前章节。

拆分章节号和标题

把同一行里的章节号和标题分成两行,例如:

^(第[一二三四五六七八九十百千万\d]+章)\s*(.+)$

替换为:

$1
$2

这类规则适合标题格式稳定的书。如果标题格式变化很大,建议使用 TXT 分章规则 或自定义章节管理。

使用分组替换

正则里的括号会产生分组。替换内容里可以用 $1、$2 引用匹配到的分组。

例如把“张三:一句话”改成“张三说:一句话”:

^([^::]+)[::](.+)$

替换为:

$1说:$2

如果结果不符合预期,先检查是否多匹配了冒号前后的正文。

删除中文之间的空格

Reeden 没有单独的「删除所有空格」开关,用一条正则替换处理。

只删两个汉字中间的空格,英文单词之间的空格保留:

([\u4e00-\u9fa5])[ \t\u3000]+(?=[\u4e00-\u9fa5])

替换为:

$1

这里没有用 \s,因为 \s 也会匹配换行,会把段落合在一起。

删除方括号里的内容

删除 [xxx] 这类方括号和里面的字:

\[[^\]\n]*\]

替换为空。中文方括号 【xxx】 换成:

【[^】\n]*】

不要写成 \[.+\]。同一行有两对方括号时,它会把中间的正文一起删掉。

删除 PS 开头的作者的话

删除以「PS:」「ps:」开头的整行:

^[Pp][Ss][::].*$

替换为空,并打开「多行匹配」。不开多行匹配时,^ 只认整章的开头。

对话独立成段

让另起的一句对话从新的一段开始,在句末标点和左引号之间换行:

([。!?…”])“

替换为下面两行(在「替换为」输入框里输入 $1,按回车换行,再输入左引号):

$1
“

也可以写成一行 $1\n“,替换内容里的 \n 会被当成换行。

想让对话结束后的叙述也另起一段,再加一条:

([。!?…])”(?=[^\n”])

替换为 $1”\n。

这两条都会大量改动分段。「作用范围」先选「当前书籍」,翻几章确认效果再扩大。

去掉标题里的章节编号

把「第十二章 灯塔来信」显示成「灯塔来信」:

^第[0-9零一二两三四五六七八九十百千万]+章[ \t\u3000]*

替换为空,打开「正则」和「多行匹配」,「作用内容」选「标题」;想让目录也一起变,选「目录与标题」。

标题只剩章节编号、没有标题文字时,这条会把整个标题删空。先在当前书籍里检查目录。

小心跨段的写法

尽量不要用 [\s\S]*、[\s\S]+? 这种能一路匹配到章节末尾的写法。章节很长时,这类正则容易匹配失败,还会拖慢打开章节的速度。

能按行处理就按行写:. 不会跨过换行,.* 最多匹配到这一行结束。

什么时候不要用正则

这些情况不建议一上来就写正则:

  • 只改一个固定错字
  • 只想临时隐藏一个短句
  • 不确定正文里是否有相似句式
  • 规则会删除大段内容
  • 还没备份重要书籍

能用普通替换解决的问题,优先用普通替换。