关于我那误打误撞学会的正则

是这样的

一个朋友喜欢看书,尤其是轻小说。以前在轻文轻小说看妹系的国轻。可惜..

iqing

但是有一本之前在轻文的妹系小说他久久无法忘怀,于是历经千辛万苦终于找到了TXT文件。我那个朋友十分注重阅读体验,所以用上了「厚墨」这款阅读器。这本是件好事,因为厚墨确实非常舒服。但是呢,厚墨导入小说的时候要使用正则表达式匹配小说标题。

虽然厚墨自带了一个正则匹配表达式,但是完全没起作用。我朋友作为一个完美主义者,完全接受不了这种奇奇怪怪的目录。所以他便找上了我。

我也是厚墨的用户之一,以前看的书一般用厚墨自带的也可以完美使用了,这到底是何方神圣。怀着这样的心情我打开了小说TXT。第一章第一节的标题是

vol.① 妹妹变得奇怪这件事情绝对没办法接受 chapter 1 这和我的妹妹不一样

这明显完全超出了厚墨自带正则的接受范围,没办法只能自己动手了。不对,我明明也不会啊

..

没办法只能硬着头皮边学边搞了。

开始

中午睡前在表哥那里学了半个钟,我的眼睛告诉我我学会了。下午赶紧找个课间试试手。

分析

第一步先分析一下这种标题的组成,看了一下前几章的标题

vol.① 妹妹变得奇怪这件事情绝对没办法接受 chapter 1 这和我的妹妹不一样
vol.① 妹妹变得奇怪这件事情绝对没办法接受 chapter 2 这个展开和我想的不一样
vol.① 妹妹变得奇怪这件事情绝对没办法接受 chapter 3 这件事情比我想象的要复杂
vol.① 妹妹变得奇怪这件事情绝对没办法接受 chapter 4 这就是我的妹妹吧

大概是vol.+符号序号(①)+卷名+chapter+章节序号(1,2,3...)+标题,然后从符号序号开始每个成分之间还要加个空格。了解了组成之后就可以动手了。第一稿,启动!

编写

vol.[①②③④⑤⑥⑦⑧⑨⑩]\s[\u4e00-\u9fa5]+\schapter\s[0-9]+\s[\u4e00-\u9fa5]+

解析一下:

vol.是写死的,不用改所以直接写上去了。然后是卷的符号序号,用一个集合[]把所有可能包起来。空格则是用\s来匹配。接下来是一段章节名,直接上中文匹配[\u4e00-\u9fa5],因为文章标题不可能只有一个字,所以加上个+表示一个或多个。之后的就按部就班地写就完事了。

试试看。

...
vol.① 妹妹变得奇怪这件事情绝对没办法接受 chapter 34 这个任务果然是失败了
vol.① 妹妹变得奇怪这件事情绝对没办法接受 chapter 35 这个礼物算是最后的方法吧
vol.④ 逐渐重叠的麻烦和心意 chapter 1 林静这是闹哪样
vol.④ 逐渐重叠的麻烦和心意 chapter 2 证明自己是个妹控
vol.④ 逐渐重叠的麻烦和心意 chapter 3 姐妹
...
vol.④ 逐渐重叠的麻烦和心意 chapter 47 被耍了
vol.④ 逐渐重叠的麻烦和心意 chapter 48 想要保护她的心意
vol.⑥ 将恐惧击碎的勇气来自羁绊 chapter 2 第一日
vol.⑥ 将恐惧击碎的勇气来自羁绊 chapter 3 第一日
...
vol.⑥ 将恐惧击碎的勇气来自羁绊 chapter 74 决断
vol.⑥ 将恐惧击碎的勇气来自羁绊 chapter 75 决断

前面都还好,不过第二三五七八卷跑到哪里去了??书本身是有到vol.⑧的,莫非中间出了什么猫腻?先看看第二第三卷啥情况。再次打开TXT文档找到出问题的章节。

vol.② 日常的转折点:TG! chapter 1 关于我有点健忘这件事……
vol.③ TG带来的乱七八糟的生活 chapter 2 新的开始和新的麻烦
vol.⑤已经无法抑制的心跳 chapter 1 海边的别墅
vol.⑦ 新生活,新动乱 chapter 1 渐回正轨的日常?【1】
vol.⑧:珍贵必用真心 chapter 2 国王游戏[2]

WTF!?卷名中间出现了中文标点和英文。第五卷中序号和卷名之间没有空格,第八卷则是用“:”代替了那个空格。

只能动手修改了。

符号序号和卷名中间有可能出现的是

  • 空格
  • “:”
  • 啥都没有

而且只会出现一个。那么就用*来解决吧。*在正则里表示出现0个及以上。这里这段正则就可以写成

[\s]*[:]*

然后是卷名中间的英文和符号问题。

会出现的情况有三种:

  • 中文++英文+
  • 英文+中文
  • 中文++中文

因为学术不精,那只能就使用笨方法了。

[A-Z]*[\u4e00-\u9fa5]+[,]*[:]*[A-Z]*[!]*[\u4e00-\u9fa5]*

那么第二稿表达式就是

vol.[①②③④⑤⑥⑦⑧⑨⑩][\s]*[:]*[A-Z]*[\u4e00-\u9fa5]+[,]*[:]*[A-Z]*[!]*[\u4e00-\u9fa5]*\schapter\s[0-9]+\s[\u4e00-\u9fa5]+

再试试。NICE,一个不漏!然而问题还没结束。

vol.⑦ 新生活,新动乱 chapter 35 自己的想法
vol.⑦ 新生活,新动乱 chapter 36 自己的想法
vol.⑦ 新生活,新动乱 chapter 38 自己的想法

为什么会出现重复的??(37不见了是小说TXT本身就没有)马上赶到出事地点。

 vol.⑦ 新生活,新动乱 chapter 38 自己的想法【4】

啊,这也是常见的标题起法呢。所以只用在后面再加上

[【]*[0-9]*[】]*

那么最终表达式就是:

vol.[①②③④⑤⑥⑦⑧⑨⑩][\s]*[:]*[A-Z]*[\u4e00-\u9fa5]+[,]*[:]*[A-Z]*[!]*[\u4e00-\u9fa5]*\schapter\s[0-9]+\s[\u4e00-\u9fa5]+[【]*[0-9]*[】]*

..

完美!

写在后面

这次一共耗时两个课间加午睡前半个小时,但是感觉收益颇丰。就是下午放学后累瘫了。一个下午都没有休息一下有点缓不过来。也算是次不错的体验吧。

我感觉我正则已经入门了!


发表评论

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠(ᐛ」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • (งᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ°Д°;)っ
  • ╮(╯▽╰)╭
  • o(*
  • >﹏<
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 颜文字

*

已有 41 条评论
          1. @季悠然推出来了,所以我觉得当头一棒不够,可能要两棒。嗯,两棒也不一定够啊,三棒吧。

  1. 正则还是很简单的,弄清楚元字符,限定符,分组和向后引用,优先级,定位符就好啦