女生找对象与正则表达式(通配符)

本文介绍如何使用通配符快速设置大量文本的格式,以《醒世恒言》为例,演示如何批量设置标题样式并生成目录。
正则表达式是用来进行文本匹配的工具,主要用于编程,一般人都没听过。不过,如果平时经常进行文本处理,也许会接触通配符。

通过简单的几个通配符,我们就能让电脑帮我们找出指定的对象(Object),当然你理解为男女朋友也可以,人们找对象都会对长相、性格、学历、思想等各方面都有要求,巴拉巴拉一大堆。有个笑话说找男友的标准很简单:180m2,180cm,180mm。不懂的人满头雾水,懂的会心一笑。通过后面这三个单位,我们可以明白它分别指什么。

同样的,通过通配符,我们也可以让电脑明白,我们想找的文本是什么样子的。

举例介绍一下通配符的用处。比如我手头有一份txt格式的电子书,《醒世恒言》。如果直接传到Kindle中观看,没有带链接的目录,非常不方便。把txt文档做成带目录的mobi文件,过程可分为三步:1.用Word添加目录、2.另存为Html文件、3.用calibre转化成mobi文件。

Word中给每一级标题设置对应的样式,再依次点击「引用」、「目录」、「插入目录」菜单,设置每种标题样式的目录级别,再点确定就可以指定位置生成目录。

那么问题来了,《醒世恒言》一共四十卷,要对四十个标题设置样式,全部要一个个手动做吗?这时,通配符就派上用场。

仔细观察正文


第一卷 两县令竞义婚孤女
.......
第二卷 三孝廉让产立高名
.......
第三卷 卖油郎独占花魁
.......
.......
.......
第三十九卷 汪大尹火焚宝莲寺
.......
第四十卷 马当神风送滕王阁
.......
.......



总结出标题的特征:
1.单独一行。
2.以「第X卷」开头,和标题之间有个空格。X是「一二三四五六七八九十」中1至3个字的组合。

只要满足这两个条件,这一行的文本就是标题。如何把这两个原则告诉电脑呢?对应的通配符如下:

(第[一二三四五六七八九十]@卷 *)^13

解释: 
[一二三四五六七八九十]是可选的字符范围,@表示在其中任意选1个或多个字符。这两个合起来,就是任意中文数字的组合,涵盖了所有编号。
*表示任意字符,这里代表每一卷的标题。
^13是通配符中的段落标记

OK,有了通配符表达式,我们就可以设置标题了。在Word中按Ctrl+H,在「查找内容」中填入上述表达式。点击左下角的「更多」,勾上「使用通配符」。单击「替换为」后面的输入框,什么都不用输,再点击左下角的「格式」、「样式」,选择你想要的标题样式。如图:


最后点「全部替换」,四十个标题就全部变成了指定格式。

有人会问,「替换为」中明明什么都不填,为什么点了替换,没有把这些标题全删除呢?因为这里指定「替换为」的样式。如果没指定,则会删除文字,如果指定样式,则会将样式应用到找到的文本。

接下来再插入目录、保存为html、生成mobi文件,点几下鼠标就能办到。传入Kindle就可以使用刚生成的目录了。

除了Word外,还有Sublime Text、Notepad、EditPlus等文本编辑器也提供了通配符支持,它们之间的通配符略有出入。

编程中需要处理字符串(含义比「文本」广)的情况非常多,于是出现了更强大的正则表达式。那些乱七八糟的语法规则我也记不住,整理了一份列表,用到时查,用久了自然熟能生巧。有需要的可以收藏一下:

https://www.zybuluo.com/king/note/43674

这不是一篇正则表达式教程,仅仅是一份速查手册。

转载请注明出处
正则表达式通配符是用于匹配字符串的工具,但应用场景有所不同。正则表达式用于在文件中匹配符合条件的字符串,支持包含匹配,像 `grep`、`awk`、`sed` 等命令都能使用正则表达式通配符则用于匹配符合条件的文件名,是完全匹配,`ls`、`find`、`cp` 等命令只能使用 shell 的通配符进行匹配 [^3]。 ### 通配符介绍 - `?`:匹配一个任意字符。 - `*`:匹配 0 个或任意多个字符,可匹配任何内容。 - `[]`:匹配中括号中任意一个字符。例如,`[aeiou]` 可匹配任意一个元音字符,`[0-9]` 能匹配任意一位数字,`[a-z][0-9]` 可匹配由小写字母和一位数字构成的两位字符。 - `[-]`:匹配中括号中任意一个字符,`-` 代表一个范围。 - `[^]`:逻辑非,表示匹配不是中括号内的一个字符。例如,`[^0-9]` 匹配任意一位非数字字符,`[^a-z]` 匹配任意一位非小写字母 [^3]。 ### 正则表达式元字符 - `*`:前一个字符匹配 0 次或任意多次。 - `.`:匹配除了换行符外任意一个字符。 - `^`:匹配行首。例如,`^hello` 会匹配以 `hello` 开头的行。 - `$`:匹配行尾。例如,`hello$` 会匹配以 `hello` 结尾的行。 - `\`:转义符,用于取消特殊符号的含义。 - `\{n\}`:表示其前面的字符恰好出现 `n` 次。例如,`[0-9]\{4\}` 匹配 4 位数字,`[1][3-8][0-9]\{9\}` 匹配手机号码。 - `\{n,\}`:表示其前面的字符出现不小于 `n` 次。例如,`[0-9]\{2,\}` 表示两位及以上的数字。 - `\{n,m\}`:表示其前面的字符至少出现 `n` 次,最多出现 `m` 次。例如,`[a-z]\{6,8\}` 匹配 6 到 8 位的小写字母 [^3]。 ### 示例代码 以下是使用 Python 演示正则表达式通配符的示例: ```python import re # 正则表达式示例 text = "hello world" pattern = r'^hello' if re.match(pattern, text): print("匹配成功") else: print("匹配失败") # 通配符在 Python 中的模拟示例(这里只是简单示例,Python 没有内置的通配符匹配函数) files = ["file1.txt", "file2.txt", "image.jpg"] for file in files: if file.endswith(".txt"): print(f"{file} 匹配 .txt 通配符") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值