12个实例教你快速入门正则表达式

2021-08-22  本文已影响0人  吉祥鸟hu

正则表达式

首发:https://mp.weixin.qq.com/s/kS_Vk_sIk9Qaq1IcPWcmVQ

这里只单纯介绍正则表达式,不会涉及其他。

基本的介绍下正则表达式,并讲解一些基本的使用方法和案例。

这篇适用于正则表达式新手入门学习,不讲太多的理论,偏向实战中练习!

先学会怎么用,用的过程中,再探索其中的逻辑。

是什么

正则表达式是什么?

正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。

说白了,正则表达式是一种工具,主要是用来提取和替换字符串。

测试工具

在我们写正则表达式的过程中,我们可能会测试表达式的正确性,这时候就要使用到测试工具

我这里使用的是 RegexTester.exe

请自行下载!

RegexTester基本使用

有2种模式,一个查找一个替换,按照需要选择

查找

image-20210818104902092

填好正则表达式和待匹配的字符串,点击运行即可显示结果

这里说下结果的0,1,2,3,4....

0:表示的就是整个正则表达式匹配到的结果,

1:表示第 1 个括号中匹配到的结果

2:表示第 2 个括号中匹配到的结果

以此类推

替换

替换和查找类似,多了一个替换项,其实就是先查找,将查到的字符串,按照替换项的规则进行替换

image-20210818170752336

$1:表示的是 这里是查找到的第 1 个括号中匹配到的结果

$2:表示的是 这里是查找到的第 2 个括号中匹配到的结果

以此类推

实例详解

就直接上案例了,案例中的所有正则表达式都在图中,我并没有给到可以直接复制粘贴,自己复现一遍,印象更深

复现的过程中,如果有正则语法、元字符、特殊字符等不懂的,可以查看下附表或者自行百度

实例1:

现在有一个待匹配字符串:

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。

需求:匹配其中的表达式3个汉字

image-20210818112238904

这里我们可以看到,直接用表达式作为正则表达式即可,我们匹配到了4个地方

实例2:

需求:匹配所有的正则表达式

image-20210818112346998

实例3:

需求:我们要匹配所有的正则表达式数据表达式

方法1

我们知道.可以用来匹配除了换行符外的任意字符,因为表达式前面2个字符变化的,我们用点来代替

image-20210818154017486

我们可以看到,匹配到了4个结果,不过其中有2个不是我们想要的,优化一下

image-20210818155058246

这样就能得到我们想要的结果了

这里的 [^的] 的意思是匹配除了 以外的任意字符

方法2

上面的方式,在当前情况下,是可以匹配到准确的字符串,但是如果换一个,可能匹配到一些我们不需要的字符串,下面我们再精确点

image-20210818112548772

这里正则表达式的意思是:

小括号表示:一个组

竖线| 表示或者的意思

总的就是匹配满足前2个字符是正则或者数学,后三个字符是表达式的字符串

实例4:

源文本:

{ url: "./202108/t20210810_1259734.html", title: '峄城区卫生健康局2021年7月卫生监督行政处罚案件', time: "2021-08-05", source:'', }
{ url: "./202107/t20210721_1249763.html", title: '峄城区市场监管局关于对枣庄越强网络科技有限公司等240家企业', time: "2021-07-22"}
{ url: "./202107/t20210721_1291713.html", title: '行政处罚...', time: "2021-07-22", source:'', }

需求:提取其中所有的url

我们看下我们想要的url有什么特征,第一个是前面有 url: 标识,第二个它们被包含在2个引号之间

所以我们可以这样写

image-20210818165831170

\s* :表示匹配0到多个任意空白字符

[^"]*?:表示匹配匹配除"以外的全部字符,非贪婪匹配 (对于贪婪匹配和非贪婪匹配不了解的可以百度下)

实例5:

源文本:

{ url: "./202108/t20210810_1259734.html", title: '峄城区卫生健康局2021年7月卫生监督行政处罚案件', time: "2021-08-05", source:'', }
{ url: "./202107/t20210721_1249763.html", title: '峄城区市场监管局关于对枣庄越强网络科技有限公司等240家企业', time: "2021-07-22"}
{ url: "./202107/t20210721_1291713.html", title: '行政处罚...', time: "2021-07-22", source:'', }

需求:提取其中所有的title

image-20210818173251623

和实例4差不多

实例6:

源文本:

{ url: "./202108/t20210810_1259734.html", title: '峄城区卫生健康局2021年7月卫生监督行政处罚案件', time: "2021-08-05", source:'', }
{ url: "./202107/t20210721_1249763.html", title: '峄城区市场监管局关于对枣庄越强网络科技有限公司等240家企业', time: "2021-07-22"}
{ url: "./202107/t20210721_1291713.html", title: '行政处罚...', time: "2021-07-22", source:'', }

需求:提取前2个字符是峄城的title

image-20210818173547981

实例7:

源文本:

{ url: "./202108/t20210810_1259734.html", title: '峄城区卫生健康局2021年7月卫生监督行政处罚案件', time: "2021-08-05", source:'', }
{ url: "./202107/t20210721_1249763.html", title: '峄城区市场监管局关于对枣庄越强网络科技有限公司等240家企业', time: "2021-07-22"}
{ url: "./202107/t20210721_1291713.html", title: '行政处罚...', time: "2021-07-22", source:'', }

需求:提取前2个字符是峄城的title所对应的url

image-20210818174252090

实例8:

源文本:

{ url: "./202108/t20210810_1259734.html", title: '峄城区卫生健康局2021年7月卫生监督行政处罚案件', time: "2021-08-05", source:'', }
{ url: "./202107/t20210721_1249763.html", title: '峄城区市场监管局关于对枣庄越强网络科技有限公司等240家企业', time: "2021-07-22"}
{ url: "./202107/t20210721_1291713.html", title: '行政处罚...', time: "2021-07-22", source:'', }

需求:提取大括号中的字符串

这种一般主要用来提取行

image-20210818174502012

实例9:

源文本:

{ url: "./202108/t20210810_1259734.html", title: '峄城区卫生健康局2021年7月卫生监督行政处罚案件', time: "2021-08-05", source:'', }
{ url: "./202107/t20210721_1249763.html", title: '峄城区市场监管局关于对枣庄越强网络科技有限公司等240家企业', time: "2021-07-22"}
{ url: "./202107/t20210721_1291713.html", title: '行政处罚...', time: "2021-07-22", source:'', }

需求:有的title中有包含...,但是我们并不需要

这时候我们就用到正则替换

image-20210819092312639

这里的.要用\进行转义,因为在正则中. 默认是匹配除换行符的任意字符

我们要将...替换为空,所以替换项,我们留空

实例10:

源文本:

{'USCC': '92340503MA2PMQ0T13', 'ID': '2cc5dea5-700a-4724-92f5-b81cd97d0cb5', 'CF_GXRQ': '2021-08-05', 'NAME': '马鞍山市万丰超市'}

需求:将USCC补充成完整的url

完整的url如下:

http://xy.mas.gov.cn/queryDoublePublicInfo?USCC=92340503MA2PMQ0T13

我们可以发现,url后面的USCC=的值,就是源文本中USCC的值,但是现在我们只有源文本,需要自己拼成url,该如何用正则实现呢

第一步:我们先提到源文本中USCC的值

image-20210819093325617

第二步:写替换项

image-20210819093838344

我们提到了USCC的值,用1来代替它,因为我们要在值的前面,加上url前缀,`http://xy.mas.gov.cn/queryDoublePublicInfo?USCC=1`,其他的字符不变

实例11:

源文本:

{'USCC': '92340503MA2PMQ0T13', 'ID': '2cc5dea5-700a-4724-92f5-b81cd97d0cb5', 'CF_GXRQ': '2021-08-05', 'NAME': '马鞍山市万丰超市'}

需求:在实例10的基础上,我想直接获取到url

我们是可以先实现实例11中的步骤,让后直接提USCC的值即可,这种就不详细说了,很简单

但是现在想用一个正则替换直接获取到正确的url

image-20210819100135726

因为正则替换是替换你查找到的字符串,没有提到的,不会进行替换,因为我们最后只留下url,所以要不源文本全部提到,进行替换处理

实例12:

源文本:

{'USCC': '92340503MA2PMQ0T13', 'ID': '2cc5dea5-700a-4724-92f5-b81cd97d0cb5', 'CF_GXRQ': '2021-08-05', 'NAME': '马鞍山市万丰超市'}

需求:在实例11的基础上,稍微在复杂一些,同样是直接获取到url

完整的url是这样的:

http://xy.mas.gov.cn/queryDoublePublicInfo?USCC=92340503MA2PMQ0T13&id=2cc5dea5-700a-4724-92f5-b81cd97d0cb5

可以看到这里有2个参数

逻辑其实和上面一样的,就是多了一步,将id的值也提到,进行正则替换

image-20210819105750721

注意

“|”和“[]”的区别:

  1. 竖线|是或者的关系,竖线两边任意匹配一边都成立
  2. 中括号[]是括号内部选一的关系,即:括号里面的字符,只要匹配到一个,即成立([]是一个字符集合)

正则中的替换

是将匹配到的数据替换为别的数据,没有匹配到数据是不变的

1、{1}:表示从0开始数,第一个小括号匹配的内容,

\s\S.的区别

附录:正则匹配大全

更多教程:https://www.runoob.com/regexp/regexp-tutorial.html

关注我获取更多内容

上一篇下一篇

猜你喜欢

热点阅读