正则表达式不会用?一篇教你快速搞懂 !

目录

    • 前言
    • 一、基础字符
    • 二、一系列常用的字符;
      • 1、一些元字符(Meta-characters)
    • 三、一些高级概念
      • 1、贪婪与懒惰匹配
      • 2、两个实例加深理解
        • 1.颜色值的匹配:RGBS值
        • 2.ipv4 地址匹配
    • 四、正则表达式常用语法
      • **1.Flags(标志符或修饰符)**
      • 2. **Character Sets(字符集合)**
      • 3. **Quantifiers (量词)**
      • 4. **Metacharacters(元字符)**
      • 5.贪婪/懒惰匹配(Greedy/Lazy Match)
    • Python经验分享
        • 一、Python所有方向的学习路线
        • 二、学习软件
        • 三、入门学习视频
        • 四、实战案例
        • 五、面试资料

前言

正则表达式对于我们来说既熟悉又陌生,我们在很多时候都遇到过,但是学起来又很难记,不好理解;在没有接触正则表达式的时候,我就在想这一串奇怪的字符为啥可以代替其他很长的一段代码就可以得到预期值,去网上找资料和技术文章学习的时候,发现有很多知识点晦涩难懂;下面我将用非常通俗易懂的方法和大家一起学习正则表达式。

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

首先我们要在网页编译器 regular expression 101 在线编译里自己动手跟着操作一遍就会发现其实没有那么难理解。(一定要实际动手操作加深记忆)

对Python感兴趣的话,文末领取全套最新Python学习资源,祝你一臂之力!

一、基础字符

接下来一起操作一遍:(默认选中颜色表示符合条件)

1. +号表示前边的字符必须至少出现一次(1次或多次);

1.png

  1. * 表示前边的字符可以不出现,或者出现一次或者多次(0次、或1次、或多次)

2.png

3.?号表示前面的字符最多只可以出现一次(0次或1次)

3.png

  1. {}号:

还是上边的例子

比如希望{}前面的字符出现的次数是4次,就用{4}表示

4.png

{} 还可以允许我们输入一个范围;比如{2,4}表示前一个字符出现2到4次;

5.png

如果想表示出现2次以上;就用{2,}表示;

6.png

  1. 如果想查找多个字符就()+

7.png

6.“或” 通配符 如果想找 a dog和a cat就在()里加“|”;这里前面会先区匹配“a”

8.png

7.字符类[]+可以匹配中括号里的字符,匹配到的字符只能取自于它们

9.png

另外 []+ 可以匹配字符的范围

[a-z]+ 表示匹配所有的小写英文字母;[A-Z]+ 表示匹配所有的大写英文字母;

[a-zA-Z]+ 表示匹配所有的英文字符;[a-zA-Z0-9]+ 表示所有的英文字符和数字

8.如果在 []+ 前边加 ^ ,就表示匹配除了尖号后边列出的【以外】的字符(包括换行符)

10.png

二、一系列常用的字符;

1、一些元字符(Meta-characters)

比如数字、空白符、单词开头、结尾等等它们被称为元字符;

\d \w \s \D \W \S … 正则表达式的大多数元字符都以反斜杠开头;

1)\d 是数字字符,等同于之前写的 [0-9]+;

11.png

2)\w 代表单词字符(英文、数字及下划线)

12.png

3)\s 代表空白符 (包含Tab和换行符)

13.png

4)与 \d 相对应的 \D 代表非数字字符

14.png

5) 与 \w 相对应的 \W 代表非单词字符

15.png

6) 与 \s 相对应的 \S 代表非空白字符

16.png

2. 其中 . 在正则表达式中也是一个特殊字符;它代表任意字符,但不包含换行字符。

17.png

3.两个特殊字符 ^ 匹配行首、$ 匹配行尾;

18.png

19.png

三、一些高级概念

1、贪婪与懒惰匹配

之前学到 * + {} 在匹配字符串的时候默认会去匹配尽可能多的字符

比如我们需要匹配下边的html标签;我们 最开始想到的肯定是 <.+>来匹配;

20.png

但是这么会把全部字符和标签选中,因为 . 表示任意字符,+ 号又表示前一项可以出现多次;不是我们想要的标签匹配,那么我们该怎么办呢?其实只需要在+号右边加一个 就好了。

它会将正则表达式中默认的贪婪匹配(Greedy Math)切换为懒惰匹配(Lazy Match)

我们来试一下:

21.png

2、两个实例加深理解

1.颜色值的匹配:RGBS值

因为RGM码是由#6位十六进制字符组成;

首先要匹配,颜色匹配符前边的#号;因为RGM是十六进制的,所以只能取自a-fA-F0-9之间; 并且长度一定是6位,最后\b作为边界值,避免不是RGM颜色的代码被识别。 一起在编译器里看一下:

22.png

可以得到预期匹配值。

2.ipv4 地址匹配

其实Ipv4地址是由四段代码实现的,数字之间由句号隔开;如果要在文本中提取所有出现的ip地址

可以直接使用\d+\.d+\.d+\.d+来进行匹配;

思路1)首先\d+ 会匹配所有的数字;

23.png

这里可以看到成功的匹配到了ipv4地址;

但是还存在一个问题;ip地址都是八位的,也就是它的范围介于0-255之间

但是256很明显超出了范围,但是还是被匹配了。

2)这时候就需要换一种思路:

首先匹配25,然后第二位取[0-5]之间的数字 : 25[0-5];

其次如果它的第一个字母是2,第二个字母是[0-4]之间的,最后一位可以取0-9之间的任意值用 \d表示 : 2[0-4]\d;

如果第一位是[01],那么最后两位可以取00-99之间的任意数字这里用\d\d表示:[01]\d\d

这三种情况中间用 | 号连接;

但是有时候,IP地址每一段也可以是两位数字甚至一位数字,这时候就可以直接在后两位数字后边加 来表示。这时候数字部分就匹配完成:25[0-5]|2[0-4]\d|[01]?\d\d?

我们需要匹配三次 ((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3};把前三段数字和后边的句点匹配完毕;

然后后边的代码还需要重复前边三段的代码 ;最后需要在收尾都加入 \ b 来匹配字符的边界;

然后看一下完整代码:

\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b

25.png

这里看出我们已经可以匹配到预期的完整字符。

四、正则表达式常用语法

1.Flags(标志符或修饰符)

g:全局匹配(global);正则表达式默认只会返回第一个匹配结果,使用标志符g则可以返回所有匹配

i:忽略大小写(case-insensitive);在匹配时忽略英文字母的大小写

m:多行匹配(multiline);将开始和结束字符(^和$)视为在多行上工作,即分别匹配每一行(由 \n 或 \r 分割)的开始和结束,而不只是只匹配整个输入字符串的最开始和最末尾处

2. Character Sets(字符集合)

用于匹配字符集合中的任意一个字符,常见的字符集有:

[xyz]:匹配 “x"或"y”``“z”

[^xyz]:补集,匹配除 “x” “y” "z"的其他字符

[a-z]:匹配从 “a” 到 “z” 的任意字符

[^a-n]:补集,匹配除 “a” 到 “n” 的其他字符

[A-Z]:匹配从 “A” 到 “Z” 的任意字符

[0-9]:匹配从 “0” 到 “9” 的任意数字

比如匹配所有的字母和数字可以写成:/[a-zA-Z0-9]/ 或者 /[a-z0-9]/i

3. Quantifiers (量词)

在实际使用中常需要匹配同一类型的字符多次,比如匹配 11 位的手机号,我们不可能将 [0-9] 写 11 遍,此时可以使用 Quantifiers 来实现重复匹配。

{n}:匹配 n 次

{n,m}:匹配 n-m 次

{n,}:匹配 >=n 次

?:匹配 0 || 1 次

*:匹配 >=0 次,等价于 {0,}

+:匹配 >=1 次,等价于 {1,}

4. Metacharacters(元字符)

常见的元字符有:

\d:匹配任意数字,等价于 [0-9]

\D:匹配任意非数字字符;\d 的补集

\w:匹配任意基本拉丁字母表中的字母和数字,以及下划线;等价于 [A-Za-z0-9_]

\W:匹配任意非基本拉丁字母表中的字母和数字,以及下划线;\w 的补集

\s:匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格

\S:匹配一个非空白符;\s的补集

\b:匹配一个零宽单词边界,如一个字母与一个空格之间;例如,/\bno/ 匹配 “at noon” 中的 “no”,/ly\b/ 匹配 “possibly yesterday.” 中的 “ly”

\B:匹配一个零宽非单词边界,如两个字母之间或两个空格之间;例如,/\Bon/ 匹配 “at noon” 中的 “on”,/ye\B/ 匹配 "possibly yesterday."中的 “ye”

\t:匹配一个水平制表符(tab)

\n:匹配一个换行符(newline)

\r:匹配一个回车符(carriage return)

5.贪婪/懒惰匹配(Greedy/Lazy Match)

<.+>: 默认贪婪匹配“任意字符”; <.+?>: 懒惰匹配“任意字符”;


以上就是今天的全部内容分享,觉得有用的话欢迎点赞收藏哦!

Python经验分享

学好 Python 不论是用于就业还是做副业赚钱都不错,而且学好Python还能契合未来发展趋势——人工智能、机器学习、深度学习等。但要学会 Python 还是要有一个学习规划,这样才能学的更快更稳,最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等学习教程。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


最新全套【Python入门到进阶资料 & 实战源码 &安装工具】(安全链接,放心点击)

我已经上传至CSDN官方,如果需要可以扫描下方官方二维码免费获取【保证100%免费】

*今天的分享就到这里,喜欢且对你有所帮助的话,记得点赞关注哦~下回见 !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/492839.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试开发工程师(QA)职业到底需要干些什么?part5:性能测试工程师QA

工作职责 性能测试工程师&#xff08;Performance Testing Engineer&#xff09;是负责评估和优化软件、应用程序或系统在不同负载和压力条件下的性能的专业人员。他们的工作职责包括以下几个方面&#xff1a; 性能测试计划&#xff1a;性能测试工程师与开发团队、产品团队和系…

工作的第二天

昨天的进度 写今天思路如何做评论表的增删该查评论表的增加 选择用户和商品 弹出框出现了问题 检查代码 结构没有问题 定义变量也没有问题 控制太中也没有报错信息 问题解决了 出现的问题在哪里定义的变量都有问题应该现在 setup 上面 定义一个 变量 const ref ref(fals…

Autosar-CanNm、Nm配置详解(免费)-2

3.5NM配置项 3.5.1NmGlobalConstants NmNumberOfChannels Nm管理几个Can通信&#xff0c;通信我们只有智能进入网需要网络管理&#xff0c;因此一般这里只需要填1。 NmNumberOfClusters 如果NM需要与几个CanNm进行协同处理的话&#xff0c;那需要把这些配置为Cluster,即组…

让 AI 帮你写代码,开发提效神器来了

如今&#xff0c;大量程序员已经习惯在 AI 辅助下进行编程。据调研&#xff0c;AI 编码工具将程序员工作效率提升 50% 以上。 通义灵码是目前国内最受开发者喜爱的 AI 编码助手&#xff0c;可以提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、…

设置http响应报文

一、总结&#xff1a; (1)设置响应状态码&#xff1a; response.statusCode (2)设置响应状态描述&#xff1a; response.statusMessage() 使用的极少 (3)设置响应头信息&#xff1a; response.setHeader(头值,头名) (4)设置响应体&#xff1a; response…

一文详解CDGA证书含金量,非常详细!

在信息技术飞速发展的今天&#xff0c;数据已成为企业宝贵的资产。正确地管理和治理这些数据&#xff0c;对于企业实现数据价值最大化、保障数据安全和合规至关重要。这也使得数据治理领域的专业人才需求持续增长。CDGA&#xff08;Certified Data Governance Architect&#x…

【并发】第三篇 Hash冲突的解决方法

导航 一. 简介二. 解决Hash冲突的方法1. 开放地址法1.1 线性探测再散列1.2 二次探测再散列1.3 伪随机探测再散列2. 链地址法3. 再哈希法一. 简介 哈希(hash)是将任意长度的输入数据转化为固定长度的输出数据的算法。哈希函数会将输入数据压缩并映射为一个固定长度的哈希值,…

Trello国内替代工具有哪些?分享5款

盘点5款类似Trello的本地部署项目管理工具&#xff1a;1.PingCode&#xff1b;2.Worktile&#xff1b;3.Teambition&#xff1b;4.redmine&#xff1b;5.TAIga.io。 Trello是一款杰出的协作与工作管理应用&#xff0c;专为追踪团队项目、凸显当前活动任务、分配责任人&#xff…

面试题 之 webpack

1.说说你对webpack理解&#xff1f;解决什么问题&#xff1f; Webpack 是实现前端项目的模块化&#xff0c;用于现代 JavaScript 应用程序的静态模块打包工具&#xff0c;被webpack 直接引用的资源打包进 bunde.js的资源&#xff0c;当webpack 处理应用程序时,它会在内部构建一…

Charles for Mac 强大的网络调试工具

Charles for Mac是一款功能强大的网络调试工具&#xff0c;可以帮助开发人员和测试人员更轻松地进行网络通信测试和调试。以下是一些Charles for Mac的主要特点&#xff1a; 软件下载&#xff1a;Charles for Mac 4.6.6注册激活版 流量截获&#xff1a;Charles可以截获和分析通…

CANalyzer使用_04 使用CAN报文发送数据

本文手把手介绍使用CAN来发送数据。分为创建工程&#xff0c;创建CAN报文&#xff0c;运行效果&#xff0c;参考文献。 1 创建工程 双击“CANalyzer->单击“I accept”->等一会等软件打开后&#xff0c;单击“File”->单击"New"->双击"CAN 500kBa…

2G-3G-4G-5G 语音方案

1.2G、3G时代&#xff0c;语音业务采用CS&#xff08;Circuited Switched&#xff0c;电路交换&#xff09;技术&#xff0c;即手机在通话前需在网络中建立一条独占资源的线路&#xff0c;直到通话结束才拆除。这种古老的技术存在耗资源、组网复杂、效率低等缺点。 2. 进入4…

每日学习笔记:C++ STL迭代器特性(Iterator Trait)、自定义迭代器

迭代器特性(Iterator Trait) 注意不同的迭代器种类类型之前有继承关系&#xff1a; 为迭代器编写泛型函数 自定义迭代器 实例

【Functional Affordances】机器人manipulation

文章目录 1. Robo-ABC: Affordance Generalization Beyond Categories via Semantic Correspondence for Robot Manipulation摘要和结论引言相关工作模型框架实验 2. Click to Grasp: Zero-Shot Precise Manipulation via Visual Diffusion Descriptors摘要和结论引言模型框架实…

电子商务营销中大数据分析的应用|大数据分析在B2C中的应用案例【抖音/京东/淘宝商品数据采集API接口的应用】

文章围绕对大数据分析在电子商务营销中的应用开展&#xff0c;研究了什么是大数据分析和电子商务的营销&#xff0c;以及对于电子商务的营销与大数据分析的结合目前是一个什么样的趋势&#xff0c;分析了大数据分析在电子商务营销中的作用&#xff0c;希望能帮助到大家。抖音/京…

码上时刻|通过逻辑视图 Logic View 快速实现批流一体

近年来&#xff0c;随着商业环境的竞争日益激烈&#xff0c;企业对于实时数据服务的需求急剧增加。Kyligence 在服务众多客户的过程中&#xff0c;很多企业对数据平台的要求越来越高&#xff0c;都希望能即时获取、处理数据&#xff0c;以便快速响应市场变化&#xff0c;加快决…

业界首次!搭载英伟达GPU,50倍性能提升!Zilliz发布Milvus 2.4向量数据库

在上周在美国硅谷圣何塞召开的NVIDIA GTC大会上&#xff0c;Zilliz[1] 发布了 Milvus 2.4 [2]版本。这是一款革命性的向量数据库系统&#xff0c;它在业界首次采用了英伟达 GPU 的高效并行处理能力和 RAPIDS cuVS 库中新推出的 CAGRA[3]&#xff08; CUDA-Accelerated Graph In…

SpringBoot+ElasticSearch实现文档内容抽取、高亮分词、全文检索

需求 产品希望我们这边能够实现用户上传PDF、WORD、TXT之内得文本内容&#xff0c;然后用户可以根据附件名称或文件内容模糊查询文件信息&#xff0c;并可以在线查看文件内容。 一、环境 项目开发环境&#xff1a; 后台管理系统springbootmybatis_plusmysqles 搜索引擎&#…

c++AVL树

cAVL树 1. 前言 map/multimap、set/multiset这几个容器的共同点是&#xff1a;它们的底层都是按照搜索二叉树来实现的&#xff0c;但是搜索二叉树存在一个缺陷&#xff1a;如果往树中插入的元素有序或接近有序&#xff0c;二叉树搜索就会退化成单支树&#xff0c;时间复杂度会…

Java入门之数据类型

一、数据类型 基本数据类型 &#xff08;1&#xff09;如果要定义“long类型的变量要在数值后面加一个L作为后缀” &#xff08;2&#xff09;如果要定义float类型的变量的时候数据值也要加一个作为后缀 小结&#xff1a; 练习 内容&#xff1a; 姓名&#xff1a;巴巴托斯 &…