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

March 18, 2020 · 代码 · 257次阅读

是这样的

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

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]*[】]*

..

完美!

写在后面

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

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

喝杯水

正则轻小说

最后编辑于4个月前

添加新评论

  1. 2020-04-20 11:12

    一招(.*?)走天下

    回复
    1. 2020-04-20 11:49

      妙啊

      回复
  2. 2020-04-08 20:37

    我是误打误撞学会了设计,成了网页设计,成了UI设计,又成了产品设计。。。。

    回复
    1. 2020-04-10 14:45

      误打误撞一条龙hhh

      回复
  3. 2020-04-05 23:51

    文章不错非常喜欢

    回复
  4. Yue Yue
    2020-04-03 11:45

    不愧是被誉为“火星文”的正则

    回复
  5. 2020-03-31 14:52

    正则一时爽,修改火葬场

    回复
  6. chz chz
    2020-03-31 10:46

    两个课间是什么鬼。。

    回复
    1. 2020-04-01 12:39

      字面意思

      回复
      1. chz chz
        2020-04-01 13:17

        敢问您老芳龄?

        回复
        1. 2020-04-02 19:28

          好问题,我的前两篇文章你应该能推出来吧

          回复
          1. chz chz
            2020-04-05 21:25

            推出来了,所以我觉得当头一棒不够,可能要两棒。嗯,两棒也不一定够啊,三棒吧。

  7. 2020-03-30 10:05

    果然厉害啊

    回复
  8. 2020-03-28 21:41

    正则用一次搜一次。

    回复
  9. 2020-03-28 09:45

    正则真的是边搜边用了,不停地改,直至能用为止

    回复
  10. 2020-03-28 09:11

    无中生有

    回复
  11. 2020-03-27 10:06

    正则表达式还是很有用的

    回复
  12. 2020-03-26 10:42

    正则在手,天下我有

    回复
    1. 2020-03-26 14:55

      嘿嘿

      回复
  13. 2020-03-25 22:18

    TXT分享下?

    回复
    1. 2020-03-25 22:30

      https://zakuro.ink
      你值得拥有

      回复
  14. 2020-03-24 17:04

    无中生友?

    回复
  15. 2020-03-23 19:59

    自说自话域名更换成rua.ink辣

    回复
    1. 2020-03-24 10:50

      换好辣

      回复
  16. 2020-03-23 14:23

    说,你这个朋友到底是不是你自己

    回复
  17. 2020-03-21 20:48

    你口中的这个朋友该不会 就是你吧

    回复
    1. 2020-03-22 11:21
      回复
      1. 2020-03-22 20:04

        你朋友是啥主题? 安利一下 ,真好看鸭

        回复
        1. 2020-03-22 20:11

          好像不是Typecho

          回复
          1. 2020-03-22 21:17

            这就一单页html加上我的删删改改

  18. 2020-03-20 16:26

    我决定不学了

    回复
  19. 2020-03-19 14:04

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

    回复
    1. 2020-03-19 14:27

      心理层面的恐惧大于技术层面

      回复
  20. 2020-03-18 22:50

    正则啊。。也不难,stack overflow能解决

    回复
    1. 2020-03-18 23:14

      上个Stack Overflow还得出趟国,不去

      回复
      1. 2020-03-20 10:15

        Stack Overflow可以上啊,或许是v6可以

        回复
      2. 2020-03-19 10:45

        明明国内能用,就是有几个JS不加载而已

        回复
  21. 2020-03-18 22:23

    最后的截图中还是缺少第28章

    回复
    1. 2020-03-18 23:11

      我这个TXT缺斤少两

      回复
  22. 2020-03-18 22:03

    我正则现在都不会,要用到的时候都是边搜索边写的 2333

    回复
    1. 2020-03-18 23:13

      可能是我没有掌握搜索引擎的真谛

      回复
  23. 2020-03-18 21:43

    无中生友

    回复
    1. 2020-03-18 23:12

      别这样

      回复
  24. 2020-03-18 20:14

    “我有一个朋友”

    回复
    1. 2020-03-18 20:55

      回复

CATEGORIES