sigil吧 关注:2,533贴子:14,640

正则表达式教程

只看楼主收藏回复

制作ePub很多时,都需要搜索特定格式的文句,添加HTML标签,写上CLASS,或修改HTML嵌套。对此正则表达式可以让你节省不少时间。
 .

查找:把目标析分特徵和变量,方便把特徵相同♂的找出来
替换:引用(捕获)内容的同时,添加修订的新字串
二楼 正则表达式 初级向字符介绍
三楼 正则表达式 进级向字符介绍
四楼 简易例子
五楼与更后的楼 实用例子


IP属地:广东1楼2014-12-28 17:19回复
    (?: )非捕获组,有分组作用但不记录捕获内容,即无法引用 (捕获)截取 的内容,
       比如sigil搜索字串时,需要大量分组而产生不少的引用,就可以使用这个非捕获组来刷去其中不需要的引用,方便自己点数。
        例: (.?5)(?:.+6)(a-z),其中第二组我不需要引用,那原本的取代为 \1\3 ,可改成 \1\2 了,分组越多时越好用。
    (?= ) 正向肯定预查,【不(捕获)内容】
        例: d(?=ing): wing ✘、win ✘、(d)ing ✔
        例: [^\s]+(?=er): (sab)er ✔、(teach)er ✔、er ✘
    (?<= )反向肯定预查,【不(捕获)内容】
        例: (?<=sa)ber: lancer ✘、teacher ✘、sa(ber) ✔
        例: (?<=第).章: 第(一章) ✔、二章 ✘、弟三章 ✘
    (?! ) 正向否定预查,【不(捕获)内容】
        例: d(?!=ing): (d)og ✔、ding ✘、(d)oor ✔
        例: sa(?!=ber): saber ✘、(sa)ve ✔、(sa) ✔
    (?<! )反向否定预查,【不(捕获)内容】
        例: (?<!=sab)er: berserk(er) ✔、teach(er) ✔、saber ✘
        例: (?<!=一)章: 五章 ✔、一章 ✘、三章 ✔
    (?s) 贪婪模式,放在表达式的最前端,【整个正则表达式】 以尽可能多的匹配; . 能匹配任何字符,包括换行符, .* .+可实现跨行匹配:
        例: (?s)哈{2,10}: 哈哈哈 ✔、哈 ✘、(哈哈哈哈哈哈哈哈哈哈)哈哈 ✔
    (?U) 懒惰模式,放在表达式的最前端,【整个正则表达式】 皆匹配最短的内容,
        例: (?U)呜{3,5}: 呜 ✘、(呜呜呜)呜呜呜 ✔、(呜呜呜)呜呜呜呜呜呜呜 ✔
    *? 和 +? 和 ?? 和 {n,m}? 皆为懒惰限定符,匹配尽可能少的字符。这个作用廷大的,
        例: ([0-5].+[6-9]): 2iamyour7father8 ✔
           ([0-5].+?[6-9]): 2iamyour7 ✔ ~以最短的形式去获取中间的字串。


    IP属地:广东3楼2014-12-28 17:19
    收起回复
      简易例子
      部份书籍以数字作题号时,转换它们从<p>去<h3>标签:
      <p>49</p>
      <p>50</p>
       转换↴
      <h3>49</h3>
      <h3>50</h3>
      思路:中间的变数使用 \d 匹配阿拉伯数字,加上 + 号表达具有一个以上,组成 (\d+) 分组,可於替换时引用 \1 。
       查找:<p>(\d+)</p>
       替换:<h3>\1</h3>
      更改HTML的class:
      <p class="title s8 ta-r">一行文字。</p>
      <p class="s8 hah">一行文字。</p>
       转换↴
      <p class="title textlarge ta-r">一行文字。</p>
      <p class="textlarge hah">一行文字。</p>
      思路:对於带s8这个class的<p>具有多个,但s8前后可能存在其它值。於此,使用 .* 表示零或多个字串,组成 (.*) 分组,前后合计两组。
       查找:<p class="(.*)s8(.*)">
       替换:<p class="\1textlarge\2">
      为<img>加上<div>包裹:
      <img src="../Images/001.jpg" /><img src="../Images/001.jpg" />
       转换↴
      <div><img src="../Images/001.jpg" /></div><div><img src="../Images/001.jpg" /></div>
      思路:<img为关键字眼,后方的变数使用 .+ 查找, .* 也可以,但总不可能没字串存在吧。加上 ? 使用懒惰模式防止跨到同行多个相连的<img>
       查找:(<img.+?>)
       替换:<div>\1</div>
      小说章节标题查找简易版:
      <p>第一章 没有丫</p>
      <p>第二章</p>
       转换↴
      <h1>第一章 没有丫</h1>
      <h1>第二章</h1>
      思路:「第」和「章」为关键字眼,之间的变数假定为「一」至「九百九十九」所以设定最少1字串和最多5字串: .{1,5},「章」后方可有字也可无,设为 .* 。
       查找:<p>(第.{1,5}章.*)</p>
       替换:<h1>\1</h1>


      IP属地:广东4楼2014-12-28 17:20
      收起回复
        楼主高人啊,这些代码复制到sigil哪里可以生效?太高深,看不懂,比如一个长文,如何快速标记并且批量分章节?


        7楼2015-01-03 16:28
        收起回复
          教程好评^ω^


          IP属地:广东来自Android客户端9楼2015-01-08 00:08
          回复
            mark!通俗易懂!


            IP属地:四川10楼2015-02-09 22:31
            回复
              “中文断句查找合并”的正则表达式有缺陷,如图,以标点开头的断句无法匹配


              IP属地:广西11楼2015-06-17 10:32
              收起回复
                有没有办法在搜索模板中批量添加“错别字”识别这种词库?


                IP属地:上海12楼2015-09-03 23:39
                回复
                  谢谢楼主分享!!


                  IP属地:广东来自Android客户端13楼2015-09-17 06:16
                  回复
                    如果我要把
                    文本:说:我不知道说什么。
                    替换成:说:“我不知道说什么。”
                    正则表达式怎么写?


                    IP属地:上海14楼2015-09-17 16:47
                    收起回复
                      <div class="kindle-cn-toc-level-3">
                      第一节 三国时期的乐舞
                      </div>
                      <div class="kindle-cn-toc-level-3">
                      第二节 魏晋风流
                      </div>
                      <div class="kindle-cn-toc-level-3">
                      第三节 各族乐舞大交流
                      </div>
                      楼主,怎么批量替换“第*节”后面的半角空格为全角空格。求解救。


                      IP属地:山东18楼2015-12-10 08:48
                      收起回复
                        怎样替换标点呢,比如把“,”替换成“。”


                        IP属地:河南来自iPhone客户端20楼2016-05-25 09:54
                        收起回复
                          大神每行文字都有<p></p>隔着,怎么可以做到没空行?


                          22楼2016-07-04 22:13
                          收起回复
                            —— 來 自 樓 主 的 通 知 ——
                            樓主心境已不年輕了,很累,沒有幹勁再去解答了。
                            ———————————————————————————————
                            !! 煩 請 不 要 回 覆 本 貼 了 !!
                            ———————————————————————————————
                            有問題開新貼就好了,讓一讓活力充沛的吧友解答


                            IP属地:广东来自手机贴吧23楼2016-07-04 23:10
                            回复
                              大神


                              IP属地:黑龙江26楼2018-08-09 20:01
                              回复