简单理解正则表达式

无意中在百度上浏览了一个机器之心的帖子新手上路:图文解读助你理解和使用正则表达式 ,看了感觉确实不错,对于新手来讲确实十分友好,于是想着输出一下加深印象,顺便也附上英文原文的链接,感兴趣的话可以看一下: Regex For Noobs (like me!) - An Illustrated Guide

首先从定义上来将,正则表达式是一种定义搜索模式的字符序列,也就是说正则表达式本质字符序列目的是定义一种搜索模式
考虑文本 cat.txt

cat
cat2
dog

如果我们使用正则表达式 cat 来搜索匹配项,我们会找到以下匹配项:

cat
cat2

另外需要重点强调的是:正则表达式适用于字符,而不是单词。例如下图,正则表达式搜索模式cat表示的意思是字母c后面紧跟一个字母a,字母a后面又紧跟着一个字母c
在这里插入图片描述
也就是说如果我们使用正则表达式搜索模式 cat,则不会查找单词「cat」,而会查找字符 c、a 和 t。
点和星号
最基本的字符是单个字符,如 a、b、c 等。现在让我们介绍以下两种特殊的字符。
在这里插入图片描述
.(点)字符可以匹配任何单个字符。例如,如果我们搜索 c.t,则将匹配从 cat 到 c0t 或 cAt 的任何内容,也即匹配 c+任何单个字符 +t

*(星号)字符修饰在它前面的字符并且匹配0个或多个。例如,cat可以匹配 cat、catt、cattttt 以及 ca。
示例分析:The cat ate my homework
假设我们逐行读取一个文件,则第一行如下所示:
The cat ate my homework.
让我们看看如何匹配该行中的模式 cat。
在这里插入图片描述
我们首先将该模式的首字符与句子中的首字符匹配。如果找不到匹配项,则跳转至该行中的下一个字符,然后再从模式的首字符开始。如果我们找到一个匹配项,则将跳转至模式和该行中的下一个字符,重复这个过程。当我们恰好找到整个模式的匹配时,则立刻返回找到匹配项的行。这就是正则表达式最基本、最常用的功能,即在较大的字符串中查找较小字符串的一种搜索模式。
讲到这里,我想大家已经大致了解了什么是正则表达式以及它的两个特殊字符: .(点)和 *(星号)。
最基本的讲完了,接下来升级一下

正则表达式三叉戟:
正则表达式的各个部分可以由三个不同的组件组成:
1,锚点
2,字符集
3,修饰符

在这里插入图片描述
让我们从三叉戟的第一个部分开始:锚点!
在这里插入图片描述
锚点指定个各行的模式位置。下面是两个最重要的锚点:

^(插入符号)将模式固定到行首。

例如,模式^1 匹配以 1 开头的任意行。

$(美元符)将模式固定到句尾。

例如,9$匹配以 9 结尾的任意行。

注意,在以上两种情况下,锚点必须分别位于模式的开头和结尾。^1 匹配行首的 1,但 1^ 匹配后面跟 ^ 的 1。类似地,1$匹配以 1 结尾的行,但$1 匹配一个该行任意位置后跟 1 的美元符号。说白了就是顺序不能变,不然为啥叫锚点呢,顺序一旦变了就是普通的搜索模式了。

字符集正则表达式的基础
单个字符,比如 a,是最基本的字符集(一个元素的集合)。但是我们可以用 [0-9] 等正则表达式可以匹配任何一个数字。
其他一些重要的字符集:

[0-9] 匹配 0…9 中的任何一个数字
[a-z] 匹配任何小写字母
[A-Z] 匹配任何大写字母
我们还可以对多个字符集进行组合:
[A-Za-z0-9] 匹配任何大小写字母和单个数字。

修饰符
此部分内容没有深入展开,以前面遇到的一个修饰符 * ( 星号)为例。修饰符改变它前面字符的含义。还有很多其他的修饰符,但以* 为例进行讨论是一个很好的开始。
如下所示:让我们快速将文本转储到文件中。

$ echo "The cat jumps long time \nThen we also have the fact that these are words.\n1234 this is a test post please ignore." >> grep.txt

这是现在文件中的内容

$ cat grep.txt
The cat jumps long time
Then we also have the fact that these are words.
1234 this is a test post please ignore.

寻找 cat

$ grep "cat" grep.txt
The cat jumps long time

寻找任何以数字^ [0-9] 开始的任意行

$ grep "^[0-9]" grep.txt
1234 this is a test post please ignore.

就是这样!你刚刚使用了正则表达式。太棒了!
现在回顾一下这篇博客的主要内容:

正则表达式的基本功能;
正则表达式的三个主要组件:锚点字符集修饰符
.(点)、*(星号)、^(插入符)和$(美元符号)。
一些字符集 [0-9]、[a-z]、[A-Z] 和它们的组合。
这篇博客的目的是通过带插图的介绍使用户更轻松地了解正则表达式。

如果能够克服技术上的困难,则最终可以掌握这种相对简单但功能却很强大的正则表达式工具,从而为任何数据科学家带来宝贵的价值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值