前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图文解读助你理解和使用正则表达式

图文解读助你理解和使用正则表达式

作者头像
程序员小强
发布于 2019-10-17 14:53:33
发布于 2019-10-17 14:53:33
83200
代码可运行
举报
运行总次数:0
代码可运行

这篇文章是关于正则表达式(regex)的插图指南,旨在为那些从来没有使用过正则表达式,想尝试但又望而生畏的新手提供一个简单介绍。

所以,欢迎使用正则表达式…

对于大多数没有接受过正式 CS 教育的人来说,正则表达式似乎只有最核心的 Unix 程序员才敢碰。

一个好的正则表达式看起来像魔法,但请记住:任何足够先进的技术都无法与魔法区分开来。

所以,就让我们揭开正则表达式的神秘面纱!

如果你理解正则表达式,它会突然变成一个超快速和强大的工具……但你首先需要理解它,老实说,我觉得新手可能会对它望而生畏!

让我们从基础开始。正则表达式(regex)是什么?它们的用途是什么?

Regex 新手上路

本质上来看,正则表达式是定义一种搜索模式的字符序列。

正则表达式通常用于 grep 等工具中,以在较长文本字符串中查找模式。

考虑以下一个 cat.txt 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
catcat2
dog

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
catcat2

高级用户需要注意的是,本文存在一个技术上的错误,即正则表达式和使用正则表达式的工具(如 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

假设我们逐行读取一个文件,则第一行如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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](这个模式匹配的内容留给读者作为练习)。

其他一些重要的字符集:

  • [0-9] 匹配 0…9 中的任何一个数字
  • [a-z] 匹配任何小写字母
  • [A-Z] 匹配任何大写字母

我们还可以对多个字符集进行组合:

  • [A-ZA-Z0-9] 匹配任何大小写字母和单个数字。

修饰符

此部分内容没有深入展开,以前面遇到的一个修饰符 *(星号)为例。修饰符改变它前面字符的含义。还有很多其他的修饰符,但以* 为例进行讨论是一个很好的开始。

如下所示:让我们快速将文本转储到文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ echo "The cat jumps long time Then we also have the fact that these are words.1234 this is a test post please ignore." >> grep.txt

这是现在文件中的内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat grep.txt
The cat jumps long timeThen we also have the fact that these are words.
1234 this is a test post please ignore.

寻找 cat。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ grep "cat" grep.txt
The cat jumps long time

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

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

就是这样!你刚刚使用了正则表达式。太棒了。

总结

回顾一下这篇博客的内容:

  • 正则表达式的基本功能;
  • 正则表达式的三个主要组件:锚点、字符集和修饰符。
  • .(点)、*(星号)、^(插入符)和$(美元符号)。
  • 一些字符集 [0-9]、[a-z]、[A-Z] 和它们的组合。

这篇博客的目的是通过带插图的介绍使用户更轻松地了解正则表达式。

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

原文地址:https://www.janmeppe.com/blog/regex-for-noobs/

End

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MoziInnovations 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
正则表达式入门
有些知识,我们只需要付出一点点时间,把它掌握了,会大大提高我们的效率,节省我们的时间。正则表达式就是这样的知识,但是,作为入行好几年的我来说,正则表达式一直是一头雾水,今天决定把它好好研究研究。
我不是费圆
2020/09/21
9650
正则表达式入门
一篇文章让你从此不再畏惧正则表达式
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。
乱码三千
2021/07/29
1.1K0
一篇文章让你从此不再畏惧正则表达式
【正则】578- 1小时真正掌握正则表达式
正则表达式其实就是在执行搜索时的格式, 它由一些字母和数字组合而成. 例如: 一个正则表达式 the, 它表示一个规则: 由字母t开始,接着是h,再接着是e.
pingan8787
2020/05/05
1.1K0
正则表达式学习笔记-高级篇
前面已经写过一篇文章《我眼里的正则表达式(入门)》介绍过正则表达式的基础和基本套路正则三段论:定锚点,去噪点,取数据了,接下来这篇文章,补充一点相对高级的概念:
一头小山猪
2020/04/10
8920
Python高级语法与正则表达式
文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。
@小森
2024/03/15
1450
正则表达式学习笔记(初级篇)
正则对于新人来说是一个头疼的名字,让人闻而生畏。但是,在我看来,正则,并没有那么神秘,希望能通过这篇正则表达式入门教程解除正则新人对于正则的畏惧感。
一头小山猪
2020/04/10
6010
正则表达式介绍与使用
正则表达式(Regular Expression)描述字符串结构模式的形式化表达方法,正则(Regex)表达式处理的对象的字符串或者抽象地说是一个对象序列(计算机体系的本质数据结构) 正则表达式是一种文本模式包括普通字符(例如a 到 z 之间的字母)和特殊字符(称为”元字符”),用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”;
全栈工程师修炼指南
2020/10/23
1.3K0
正则表达式介绍与使用
正则表达式语法-正则表达式教程——语法篇
正则表达式,名字听上去就没有吸引力,我发现很多前端对正则表达式都很难做到如数家珍,每次能够运行全凭运气正则表达式语法,更有甚者完全靠复制粘贴,其实这样并不好
宜轩
2022/12/26
6250
还不会正则表达式?看这篇!
正则表达式是很多程序员,甚至是一些有了多年经验的开发者薄弱的一项技能。大家都很多时候都会觉得正则表达式难记、难学、难用,但不可否认的是正则表达式是一项很重要的技能,所有我将学习和使用正则表达式时的关键点整理如下,供大家参考。
MudOnTire
2019/05/26
9560
讲给前端的正则表达式(1):基本概念
正则表达式(regex)是定义搜索模式的字符序列。由于对程序员的日常工作非常有用,所以在 JavaScript 中也支持它。在这个系列文章中,我会向你展示其工作方式以及其实际用途。希望在结束本系列后,你将能够轻松的写出自己的正则表达式。
疯狂的技术宅
2019/12/23
1.3K0
讲给前端的正则表达式(1):基本概念
正则表达式
正则表达式,又称规则表达式,模式匹配。(英语:Regular Expression,在代码中常简写为regex、regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
生信喵实验柴
2022/10/25
7220
正则表达式
正则表达式
正则表达式(Regular Expression,简称Regex)是在一个主体字符串中从左到右匹配字符串时的一种样式。
matt
2022/10/25
5130
正则表达式
正则表达式
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本,比如爬虫工程师可以用正则表达式来匹配网页上的文本数据,自然语言工程师可以用正则表达式匹配出含有敏感词的语句,作为气象工程师,我们可以用正则表达式来处理我们服务器内的日志文件,也可以用来匹配特定规律的模式输出文件名。
MeteoAI
2019/08/19
6330
正则表达式
处理海量日志对每一个运维来说都非常的头疼,日志分析我们首先需要把需要的数据从海量的日志中匹配出来,降低数据量,然后在分析这些日志。那么从海量的日志中把我们需要的日志找出来就需要我们写一个公式来匹配,那么如何才能写一个这样的公式呢?
星哥玩云
2022/09/15
5690
正则表达式详解
正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用来按照“给定模式”匹配文本。比如,正则表达式给出一个 Email 地址的模式,然后用它来确定一个字符串是否为 Email 地址。JavaScript 的正则表达式体系是参照 Perl 5 建立的。
IT人一直在路上
2019/09/16
1.1K0
正则表达式学习
重要声明,本文转载自 : https://github.com/ziishaned/learn-regex
pankas
2022/08/10
1.8K0
正则表达式学习
正则表达式
正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式,在 JavaScript中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。正则表达式可用于所有文本搜索和文本替换的操作。 ==那就开始吧~==
Qwe7
2022/04/01
2650
从基础到最佳实践:精通Python正则表达式
Python re模块精通:解锁Regex文本处理能力!从数据提取、用户验证到自动化任务,掌握字符类、量词、锚点等核心概念。更有re.search()、re.sub()等函数,结合IGNORECASE等修饰符,提升数据处理效率,玩转Cloud Native!
云云众生s
2025/03/20
2920
还不会正则表达式?看这篇!
正则表达式是很多程序员,甚至是一些有了多年经验的开发者薄弱的一项技能。大家都很多时候都会觉得正则表达式难记、难学、难用,但不可否认的是正则表达式是一项很重要的技能,所有我将学习和使用正则表达式时的关键点整理如下,供大家参考。
ConardLi
2019/06/19
8160
还不会正则表达式?看这篇!
一文搞定Python中的正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
皮大大
2020/11/03
8920
一文搞定Python中的正则表达式
相关推荐
正则表达式入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验