这篇文档关于正则的使用方法和技巧,主要面向文科小白,如果你是IT大佬,请移步~
先说好,我不是程序猿/媛。
推荐正则不是让大家写代码,纯粹是为了让大家在翻译时能提高效率。(反正正则就是谁用谁说好~)
这一节的内容介绍:
- 正则表达式是什么
- 正则表达式的作用
- 正则的常用场景和匹配表达
- 利用
点、星号、加号和问号
匹配任意字符的零项、一项或多项目- 利用
^
和$
匹配开头和结尾- 转义符
- 一些字符集及其组合
- 匹配重复次数
我们看看正则是怎么定义的:
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
听不懂,先放放定义。没关系,定义不重要,有啥作用和咋用比较重要。请继续。
第一,当然是为了提高搜索效率。
比如,你可能通过正则搜索以下场景:
第二,反正搜索有时候就是为了替换的嘛,所以用正则也是为了提高替换的效率。
总之,只要你觉得搜起来/替换起来很麻烦的,想搜但搜不到的,正则都能帮你。
.(点)可以匹配任意单个字符。意思就是,只要是一个字符,就能搜出来。比如,如果我搜索 c.t
,那我搜出来的结果可能有:cat
、 cbt
、 cct
、 cdt
、 c0t
、 cAt
、等等。—–只要包含c什么什么t的都会被搜出来。
*(星号)可以匹配内容的零项、一项或者多项**。意思就是:如果没有就算惹;如果有麻烦帮我匹配一下。比如,如果我搜索 c.*t
,那我搜出来的结果可能有:cat
、 caat
、 caaaaaat
、 ct
等等。你看,c和t之间可能啥也没有,所以 ct
也会被搜出来。
+(加号)可以匹配内容的一项或者多项。意思就是,我知道肯定有,但是我不知道有几个这样的。比如,如果我搜索 c.+t
,那我搜出来的结果可能有:cat
、 cbbbt
、 ccct
、 c0t
、 cAAt
、等等, 但是ct
就不会被搜出来。
\?(问号)可以匹配内容的零项或者一项。意思就是,我不知道有没有,如果没有就算惹;如果有麻烦帮我只匹配有一次的内容。。比如,如果我搜索 c.?t
,那我搜出来的结果可能有:cat
、 cbt
、 cct
、 ct
等等,像 caat
就不会被搜出来。
做事情都讲究有始有终,使用正则也是一样的嘛~ 要想好从哪里开始搜索,和搜到哪里结束:从哪里开始用 ^
(插入符号,同时按下键盘的 shift+数字6
),从哪里结束用 $
(美元符号,同时按下键盘的 shift+数字4
)。
举个例子🌰
我想搜索1开头的任意内容,那我就可以使用 ^1.+
。这时候你可能会搜出来 12340
, 18293274
, 1是一个数字
等等,只要是数字1开头,一直到段落结束的所有内容都会被搜出来。
转义转义,帮忙转换一下意义。比如说,本来在正则中,
.
表示匹配任意字符,如果是 \.
(在点前面加了个转义符),就表示匹配小数点,而不是匹配任意字符啦~ 再比如说, +
表示匹配任意字符,如果是 \+
(在加号前面加了个转义符),就表示匹配加号,而不是匹配一个或多个内容啦~
下次如果你也不知道到底有没有含义,可以试试在前面加一个转义符号。
常用的带转义符的正则公式有:
\s
表示匹配空格\d
表示匹配数字\n
表示匹配换行符\r
表示匹配回车符\t
表示匹配tab字符
- 字符集用
[]
(英文的中括号对)表示。我记得小时候,也不是小时候,好像是初高中吧,学“集合”,就是用的这个东西。数学中集合具有某种特定性质的具体的或抽象的对象汇总而成的集体,这里的含义和数学上那个是一样的。简单理解,就是一类字符。再理解不了往下看:
常见的字符集有:
[a-z]
表示匹配a至z之间的一个小写英文字母[A-Z]
表示匹配A至Z之间的一个大写英文字母[0-9]
表示匹配0至9之间的一个数字[\u4e00-\u9fa5]
表示匹配中文字符当然,也可以进行组合,比如说:
[A-Za-z0-9]
表示匹配任意大小写字母和单个数字
如果想设置一个精确匹配的次数,就可以用 {}
(英文的大括号对)表示。比如,如果搜索 c.{3}t
,那么就只能搜出 caaat
、 cbbbt
、 chhht
等等,只有c和t中间有三个字符的,才会被匹配出来。再比如,如果搜索 c.{3,5}t
,那么就只能搜出 caaat
、 caaaat
、 caaaaat
等等,只有c和t中间有3-5个字符的,才会被匹配出来。
理论得结合实践,光看不行可以练一下~我经常会用memoQ的正则过滤器测试,不过网上也有很多可以测试正则的网址,比如,你可以戳这里(https://tool.oschina.net/regex),自己造点文本练习一下,你也可以用以下文本拿去测试。(答案都给出了,白嫖的机会就练一练咯~)
日期 | 匹配规则 |
---|---|
2018-06-25 | \d+-\d+-\d+ |
06/25/2018 | \d+/\d+/\d+ |
2018年06月25 | \d+年\d+月\d+日 |
2018年06月25日 | \d+年\d+月\d+日 |
至于为什么这样匹配~交给你想一下啦~当然如果你有更好的匹配规则,po出来我们一起讨论~
其实写这篇帖子最终的目的不是一定要成为一个很牛掰的用正则的人,而是希望引入一个提高翻译和项目管理效率的理念:
下次想查找替换的时候,或者想要处理什么文本的时候,先想想正则表达式 。
如果不会用,“百度一下”也是OK的啦~比如,百度一下“中文 正则”,也是可以的呀~(反正我也老这么干)
但是一定要先想着用才行~
本文目录
© Copyright 2023. 大辞科技 沪ICP备17050550号 沪公网安备 31011402006110号