正则表达式教程
sigil吧
全部回复
仅看楼主
level 11
制作ePub很多时,都需要搜索特定格式的文句,添加HTML标签,写上CLASS,或修改HTML嵌套。对此正则表达式可以让你节省不少时间。
 .
查找:把目标析分特徵和变量,方便把特徵相同♂的找出来
替换:引用(捕获)内容的同时,添加修订的新字串
二楼 正则表达式 初级向字符介绍
三楼 正则表达式 进级向字符介绍
四楼 简易例子
五楼与更后的楼 实用例子
2014年12月28日 09点12分 1
level 11
(?: )非捕获组,有分组作用但不记录捕获内容,即无法引用 (捕获)截取 的内容,
   比如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 ✔ ~以最短的形式去获取中间的字串。
2014年12月28日 09点12分 3
楼主你好。谢谢你的教程,简单易懂,初级部分我很快就上手了,在此再次表达我的感谢。然后我刚才发现这一楼的“反向否定预查”部分,你的例子的表达式(?<!=一)这个部分有个等于号,但是上面又没有,我发现在sigil里这个=不加上是可以正常搜索的,加上去就不能搜索,请问这里的例子是不是写错了?
2015年09月05日 12点09分
楼主你好我有发现(?= ) 正向肯定预查,【不(捕获)内容】的第一个例子是错误的,(d)ing ✔应该是d(ing) ✔它是不捕获ing的而不是d。
2015年09月05日 12点09分
回复
Ψĺ
: 嗯,否定预查是不需要加上=号,感谢指正,当时复制格式时忘删了。另外括号是指要捕获的内容,指找出后面跟有ing的d,而ing是不需要找取的
2015年09月05日 16点09分
回复
Ψĺ
: 我想可能是【不(捕获)内容】这个描述影响到判断。实际上捕获内容就用括号括上。本教程真想找人代我修改和重发贴一下
2015年09月05日 17点09分
level 11
简易例子
部份书籍以数字作题号时,转换它们从<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>
2014年12月28日 09点12分 4
这类正则表达式的查找替换非常实用,但长期不用总记不住。要用了又找不到,谢谢分享!MARK一下……
2021年02月25日 07点02分
level 1
楼主高人啊,这些代码复制到sigil哪里可以生效?太高深,看不懂,比如一个长文,如何快速标记并且批量分章节?
2015年01月03日 08点01分 7
生效,实例嘛。按你的要求就是要把标题区分出来并加插sigil分割标记,见上面的例子【小说章节标题查找简易版】【轻小说标题】,当然应对查找范围有限,可按需要改遍。
2015年01月03日 09点01分
level 12
教程好评^ω^
2015年01月07日 16点01分 9
level 7
mark!通俗易懂!
[真棒]
2015年02月09日 14点02分 10
level 13
“中文断句查找合并”的正则表达式有缺陷,如图,以标点开头的断句无法匹配[玫瑰]
2015年06月17日 02点06分 11
不明觉厉
2015年06月17日 06点06分
然而在最后的 ] 前加上,号即可:(?<=[\x{4e00}-\x{9fa5}])</p>\s*<p>(?=[\x{4e00}-\x{9fa5},])
2015年06月17日 08点06分
正则式 [ ] 一对方括号 - 用作匹配概括的字符,我所给出的例句就有两处 [ ] 符。所以要连接甚麼的标点断句,都可在 [ ] 内加上该标点。
2015年06月17日 08点06分
回复
0066ch
: [黑线]但感觉我如果加上,|。|?|…|~|《|》|(|)|「|」这样子估计我就要夭寿了……
2015年06月17日 08点06分
level 1
有没有办法在搜索模板中批量添加“错别字”识别这种词库?
2015年09月03日 15点09分 12
level 10
谢谢楼主分享!!
2015年09月16日 22点09分 13
level 1
如果我要把
文本:说:我不知道说什么。
替换成:说:“我不知道说什么。”
正则表达式怎么写?
2015年09月17日 08点09分 14
给你一下考题,你先把固定通用的部份找出来,会变化的部份就参考教程怎麼写。多想想,不难的,看完教程基本部份相信你也可以的。
2015年09月17日 09点09分
我感觉用正则搜索比替换要简单很多~o()^))o 唉
2015年09月17日 15点09分
搜索: 说:(.*)。$ 替换: 说:“$1。” 可以做到我想做的,但是有一个问题真的请教下我用$来表示结尾没有”符号,但是我怎么表示:后面没有“符号呢?
2015年09月17日 15点09分
好吧,突然发现在sigil中还是通不过
2015年09月17日 16点09分
level 2
<div class="kindle-cn-toc-level-3">
第一节 三国时期的乐舞
</div>
<div class="kindle-cn-toc-level-3">
第二节 魏晋风流
</div>
<div class="kindle-cn-toc-level-3">
第三节 各族乐舞大交流
</div>
楼主,怎么批量替换“第*节”后面的半角空格为全角空格。求解救。
2015年12月10日 00点12分 18
不試試自己先寫一下麼,查找:(第.节) 注意關閉括號後有個一半空格,至於取代怎麼填就考一考你
2015年12月10日 07点12分
回复
0066ch
:已经试过N多次了。每次都把标签里[泪]的空格也给替换了。
2015年12月10日 07点12分
@沙__________ 那麼我給出的查找,取代要怎樣填呢[滑稽]
2015年12月10日 08点12分
回复
0066ch
:如果是替换除了html标签外的所有的半角空格呢。。。。
2015年12月10日 08点12分
level 5
怎样替换标点呢,比如把“,”替换成“。”
2016年05月25日 01点05分 20
這個直接查替,明顯會誤處理一大把。文本中除非有明顯特徵,比如「,」後就是結尾,查「,<\」取代為「。<\」
2016年05月25日 08点05分
回复 0066ch :有什么学习代码的好方法吗,很多都看不懂。
2016年05月28日 14点05分
level 6
大神每行文字都有<p></p>隔着,怎么可以做到没空行?
2016年07月04日 14点07分 22
留意空行中<p></p>包着甚麼東西,通常是<br/>和 或者  那麼用用正則式搜索那些特徵取代為無即可[滑稽]
2016年07月04日 14点07分
如搜索:<p>(?: | |<br ?/>)+</p>
2016年07月04日 14点07分
回复 0066ch :忘了打,是<p><br/></p>
2016年07月04日 14点07分
回复 0066ch :优酷那个是<p><br /></p>,换的时候为什么要加上\n?我那个也要加吗?
2016年07月04日 14点07分
level 11
—— 來 自 樓 主 的 通 知 ——
樓主心境已不年輕了,很累,沒有幹勁再去解答了。
———————————————————————————————
!! 煩 請 不 要 回 覆 本 貼 了 !!
———————————————————————————————
有問題開新貼就好了,讓一讓活力充沛的吧友解答
2016年07月04日 15点07分 23
level 1
大神[花心]
2018年08月09日 12点08分 26
level 9
不知道楼主怎样了,还累不累?当初这篇教学直接把我带入了正则表达式的世界,很神奇也很好玩。多谢楼主。
2020年03月06日 02点03分 29
level 11
***的太有用了
2020年06月05日 13点06分 31
level 1
是啊二楼去哪了呢。。。。。。
2021年04月02日 03点04分 35
level 5
楼主用心了,谢谢
2022年06月16日 03点06分 37
1 2 尾页