选自janmeppe.com
作者:Jan Meppe
机器之心编译
参加:韩放、杜伟
这篇博客是关于正则表达式(regex)的插图攻略,旨在为那些从来没有运用过正则表达式,想测验但又望而生畏的新手供给一个简略介绍。
所以,欢迎运用正则表达式…
关于大多数没有接受过正式 CS 教育的人来说,正则表达式好像只要最中心的 Unix 程序员才敢碰。
一个好的正则表达式看起来像魔法,但请记住:任何满足先进的技能都无法与魔法区别开来。
所以,就让咱们揭开正则表达式的奥秘面纱!
假如你了解正则表达式,它会忽然变成一个超快速和强壮的东西……但你首要需求了解它,老实说,我觉得新手或许会对它望而生畏!
让咱们从根底开端。正则表达式(regex)是什么?它们的用处是什么?
Regex 新手上路
本质上来看,正则表达式是界说一种查找形式的字符序列。
正则表达式一般用于 grep 等东西中,以在较长文本字符串中查找形式。
考虑以下一个 cat.txt 文件:
假如咱们运用正则表达式 cat 来查找匹配项,咱们会找到以下匹配项:
高档用户需求留意的是,本文存在一个技能上的过错,即正则表达式和运用正则表达式的东西(如 grep)混为了一谈。
正则表达式适用于字符,而不是单词
需求反复强调的一个重要问题是:正则表达式适用于字符,而不是单词。隐含串联。
假如咱们运用正则表达式查找形式 cat,则不会查找单词「cat」,而会查找字符 c、a 和 t。
点和星号
最基本的字符是单个字符,如 a、b、c 等。现在让咱们介绍以下两种特别的字符。
.(点)字符能够匹配*任何单个字符*。例如,假如咱们查找 c.t,则将匹配从 cat 到 c0t 或 cAt 的任何内容,并将匹配任何单个字符 c +任何字符+单个字符 t。
*(星号)字符有点困难。它修正它前面的字符,然后匹配该字符的*零个或多个字符*。确实如此。例如,cat*能够匹配 cat、catt、cattttt 以及 ca。
示例剖析:The cat ate my homework
假定咱们逐行读取一个文件,则榜首行如下所示:
让咱们看看怎么匹配该行中的形式 cat。
咱们首要将该形式的首字符与语句中的首字符匹配。
假如找不到匹配项,则跳转至该行中的下一个字符,然后再从形式的首字符开端。
假如咱们找到一个匹配项,则将跳转至形式和该行中的下一个字符,然后重复这个进程。当咱们找到整个形式的匹配时,回来找到匹配项的行。
这便是正则表达式最基本、最常用的功用,即在较大的字符串中查找较小的查找形式。
讲到这儿,我想咱们现已大致了解了什么是正则表达式以及它的两个特别字符:.(点)和 *(星号)。接下来,我会为咱们介绍更多其他内容。
正则表达式三叉戟
正则表达式的各个部分能够由三个不同的组件组成:
锚点
字符集
修饰符
这三部分构成了正则表达式的三叉戟!
让咱们从三叉戟的榜首个部分开端:锚点!
锚点
锚点指定个各行的形式方位。下面是两个最重要的锚点:
^(刺进符号)将形式固定到行首。例如,形式^1 匹配以 1 最初的恣意行。
$(美元符)将形式固定到句尾。例如,9$匹配以 9 结束的恣意行。
留意,在以上两种情况下,锚点有必要别离坐落形式的最初和结束。^1 匹配行首的 1,但 1^匹配后跟^的 1。类似地,1$匹配以 1 结束的行,但$1 匹配一个该行恣意方位后跟 1 的美元符号。
字符集
三叉戟的第二部分:字符集。字符集是正则表达式的根底。单个字符,比方 a,是最基本的字符集(一组元素)。可是 [0-9] 等正则表达式能够匹配任何一个数字,或许假如你能回想到 *的意义,则能够制造形式 [0-9][0-9](这个形式匹配的内容留给读者作为操练)。
其他一些重要的字符集:
[0-9] 匹配 0…9 中的任何一个数字
[a-z] 匹配任何小写字母
[A-Z] 匹配任何大写字母
咱们还能够对多个字符集进行组合:
[A-ZA-Z0-9] 匹配任何大小写字母和单个数字。
修饰符
此部分内容没有深化打开,以前面遇到的一个修饰符 *(星号)为例。修饰符改动它前面字符的意义。还有许多其他的修饰符,但以* 为例进行评论是一个很好的开端。
如下所示:让咱们快速将文本转储到文件中。
这是现在文件中的内容。
寻觅 cat。
寻觅任何故数字^[0-9] 开端的恣意行。
便是这样!你刚刚运用了正则表达式。太棒了。
总结
回忆一下这篇博客的内容:
正则表达式的基本功用;
正则表达式的三个首要组件:锚点、字符集和修饰符。
.(点)、*(星号)、^(刺进符)和$(美元符号)。
一些字符集 [0-9]、[a-z]、[A-Z] 和它们的组合。
这篇博客的意图是经过带插图的介绍运用户更轻松地了解正则表达式。
假如能够战胜技能上的困难,则终究能够把握这种相对简略但功用却很强壮的正则表达式东西,从而为任何数据科学家带来名贵的价值。
原文地址:https:///blog/regex-for-noobs/
本文为机器之心编译,转载请联络本大众号取得授权。
------------------------------------------------