Python正则表达式的简单应用和示例演示

前一阵子小编给大家连续分享了十篇关于Python正则表达式基础的文章,感兴趣的小伙伴可以点击链接进去查看。今天小编给大家分享的是Python正则表达式的简单应用和示例演示,将前面学习的Python正则表达式做一个概括。

Python正则表达式的简单应用和示例演示

下面的栗子是用于提取高考日期,一般来说,我们填写日期都会写2018年6月7日,但是也有很多人会写成2018/6/7、2018-6-7、2018-06-07等,还有的人可能会写为2018-06或者2018年6月。总之对日期的写法五花八门,那么我们现在需要写一个正则表达式来统一匹配这么多的情况,应该如何来处理呢?具体的教程如下所示。

Python正则表达式的简单应用和示例演示

1、首先我们先写个简单的正则表达式,然后一步步经过测试,慢慢达到匹配的效果。

Python正则表达式的简单应用和示例演示

这个正则表达式比较复杂,一下子可能看不懂,小编带大家一层一层的进行理解。

2、我们从左到右对正则表达式进行分析,首先“.*”代表的是任意字符出现任意多次,对应原始字符中的“XXX”;“高考时间是”没有什么特别的,就是对应原始字符串中的“高考时间是”。

3、接下来是“\d{4}”代表的是连续出现4个数字,对应原始字符串中的年份“2018”;“[年/-]”表示取“年”、“/”、“-”中的任意一个字符,对应原始字符串中年份“2018”之后所连接的下一个字符。

4、继续往后是“\d{1,2}”代表的是连续出现1个到2个数字,对应原始字符串中的月份“6”或者“06”;“[月/-]”表示取“月”、“/”、“-”中的任意一个字符,对应原始字符串中月份“6”或者“06”之后所连接的下一个字符,同年份的理解如出一辙。

5、接下来就复杂一些了,其中“\d{1,2}”的理解同月份的理解一致,关键是关于“日”的提取主要需要注意有的字符串有日期,有的字符串并没有日期,所以需要特殊字符“|”来表示“或”的关系,并且用特殊字符“$”来表示结束。

6、理解了上述关系之后,接下来依次验证六个原始字符串,看看是否能匹配成功。下图是原始字符串string2的匹配情况。

Python正则表达式的简单应用和示例演示

发现可以匹配得上。

7、下图是原始字符串string3的匹配情况。

Python正则表达式的简单应用和示例演示

发现可以匹配得上。

8、下图是原始字符串string4的匹配情况。

Python正则表达式的简单应用和示例演示

发现可以匹配得上。

9、下图是原始字符串string5的匹配情况。

Python正则表达式的简单应用和示例演示

发现这种模式并不能匹配上,这是什么原因呢?

10、原因是月份“\d{1,2}”后面限定要跟“[月/-]”,而原始字符串string5的时间为“2018-06”,其后面没有任何的字符就结束了,也匹配模式搭配不上,因此在这里需要改进一下。

Python正则表达式的简单应用和示例演示

需要利用特殊字符“|”和特殊字符“$”,做一个“或”的选择,如上图所示,之后就可以匹配成功了。

当然也可以直接把“[月/-]”一起加入到第二个括号里,如下图所示,这种方式更为简便。

Python正则表达式的简单应用和示例演示

11、下图是原始字符串string6的匹配情况。

Python正则表达式的简单应用和示例演示

可以看到此时可以成功匹配。

经过测试可以发现,此时改进后的字符串对6种不同日期的字符串都可以成功匹配。小伙伴们,有没有感受到正则表达式的魔力呢?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python正则表达式初识(十)附正则表达式总结

今天分享正则表达式最后一个特殊字符“\d”,具体的教程如下。

1、特殊字符“\d”十分常用,其代表的意思是数字。代码演示如下图所示。

Python正则表达式初识(十)附正则表达式总结

其中“+”的意思是表示连续,在这里代表的意思是连续的数字。但是输出只有“4”这个字符,原因是贪婪模式所致,在上一篇文章中也有提及。

2、如果想要匹配“2004”,则需要加个特殊字符“?”,如下图所示。

Python正则表达式初识(十)附正则表达式总结

此时是非贪婪模式,匹配从前往后进行,且匹配连续的数字,所以得到的输出结果是“2004”。

3、还有一只常见的使用方式是使用大括号来指定匹配数字的长度,如下图所示,指定匹配的数字长度为4,即连续的4位数字。

Python正则表达式初识(十)附正则表达式总结

今天小编带大家将这10篇关于正则表达式的特殊字符初识回顾一下,但是不具体展开。

1、“^”代表的意思是限定以某个字符开头,具体用法可以参考这篇文章:Python正则表达式初识(一)。

2、“*”代表的意思是限定前面的字符出现任意多次,这个任意多次包括0次,即次数大于等于0。具体用法可以参考这篇文章:Python正则表达式初识(一)。

3、“.”代表的意思是任意字符,其范围非常广,包含了所有的字符。具体用法可以参考这篇文章:Python正则表达式初识(一)。

4、“$”代表的意思是限定以某个字符结尾。具体用法可以参考这篇文章:Python正则表达式初识(二)。

5、“?”代表的意思是非贪婪模式。具体用法可以参考这篇文章:Python正则表达式初识(二)。

6、“+”代表的意思是限定前面的字符出现任意多次,这个任意多次不包括0次,至少出现1次,即次数大于等于1。具体用法可以参考这篇文章:Python正则表达式初识(三)。

7、“{2}”、“{2,}”、“{2,5}”三种表达方式,限定前面的字符出现的次数。“{2}”代表前面的字符出现两次;“{2,}”代表前面的字符出现两次以上;“{2,5}”代表前面的字符出现两次到5次之间。具体用法可以参考这篇文章:Python正则表达式初识(四)。

Python正则表达式初识(十)附正则表达式总结

8、“|”代表的意思是该竖线两边的值只需要匹配上其中一个即可,就可以满足要求,相当于逻辑运算关系中的“或”。具体用法可以参考这篇文章:Python正则表达式初识(五)。

9、“[]”、“[A-Za-z0-9]”、“[^]”三种表达方式。“[]”表示中括号中出现的任意一个字符;“[A-Za-z0-9]”表示取值区间;“[^]”代表的意思是非、取反的意思。具体用法可以参考这篇文章:Python正则表达式初识(六)。

10、“\s”的意思是代表空格,“\S”的意思是代表非空格。具体用法可以参考这篇文章:Python正则表达式初识(七)。

Python正则表达式初识(十)附正则表达式总结

11、“\w”的意思是代表26个大小写字母、0-9共10个数字以及下划线,即表达式[A-Za-z0-9_]所代表的内容;“\W”的意思和“\w”相反,代表的是除了表达式[A-Za-z0-9_]代表的内容之外的其他所有字符。具体用法可以参考这篇文章:Python正则表达式初识(八)。

12、“[\\u4E00-\\u9FA5]”这个区间代表的意思是汉字。具体用法可以参考这篇文章:Python正则表达式初识(九)。

13、“()”是用于提取子字符串用的,在正则表达式的每篇文章中都有提及。

14、“\d”的意思是代表数字类型。具体用法可以参考本文。

Python正则表达式初识(十)附正则表达式总结

小伙伴们,关于Python正则表达式的用法你们get到了吗?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python正则表达式初识(九)

继续分享Python正则表达式的基础知识,今天给大家分享的特殊字符是[\\u4E00-\\u9FA5],这个特殊字符最好能够记下来,如果记不得的话通过百度也是可以一下子查到的。

Python正则表达式初识(九)

该特殊字符是固定的写法,其代表的意思是汉字。换句话说,只要字符中是汉字,就可以通过该字符进行匹配,该特殊字符也是用中括号括起来的。具体的代码演示如下。

1、原始字符串是“加油”,两个汉字,然后将匹配模式直接为[\\u4E00-\\u9FA5],如下图所

Python正则表达式初识(九)

可以看到此时的输出结果仅仅出现了一个“加”字,因为该匹配模式默认是匹配一个字符。

2、如何想匹配多个字符,只需要在匹配模式后面加一个“+”号即可,表示匹配连续出现的汉字,如下图所示。

Python正则表达式初识(九)

此时可以看到“加油”全都匹配出来了。

3、为了进一步加强对该特殊字符的理解,现在将“加油”两字中嵌入非汉字,如下图所示。

Python正则表达式初识(九)

可以看到只匹配到了“加”,但是非汉字字符“a”及其以后的字符全部都匹配不到了,因为原始字符串并不是连续出现的汉字。

4、将非汉字字符放到字符串最后边,如下图所示。

Python正则表达式初识(九)

此时可以看到“加油”这两个连续的汉字可以成功匹配,但是非汉字字符匹配不到。

5、如果将“加油”中间加个空格,改为“加 油”,其他的保持不变,如下图所示。

Python正则表达式初识(九)

此时可以看到输出的结果仅仅是个“加”字,空格及其之后的字符都匹配不到,因为原始字符串并不是连续出现的汉字。

6、举个栗子,在实际应用中,往往会需要用到连续匹配汉字的地方。如现在有个需求,需要匹配字符串中的“XX”大学,如“清华大学”、“北京大学”、“中山大学”等,我们只知道字符“XX”是连续的中文,此时就可以用到本文介绍的汉字字符,如下图所示。

Python正则表达式初识(九)

此时可以看到“清华大学”匹配成功。需要注意的是特殊字符“?”记得加上,代表非贪婪模式,如果不加这个字符的话,则匹配模式从字符的后面往前取,得到的结果仅仅为“华大学”,如下图所示。

Python正则表达式初识(九)

7、同样的,如果要匹配“上海交通大学”,也是如此,如下图所示。

Python正则表达式初识(九)

小伙伴们,关于汉字匹配字符,你们get到了么?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python正则表达式初识(八)

继续分享Python正则表达式的基础知识,今天给大家分享的特殊字符是“\w”和“\W”,具体的教程如下。

Python正则表达式初识(八)

1、“\w”代表的意思是该字符为任意字符,但是和特殊字符“.”的意思不同。“\w”代表的字符主要包括26个大写字母A到Z,即[A-Z]、26个小写字母a到z,即[a-z]、10个阿拉伯数字0到9,即[0-9]和下划线“_”。总结起来就是,“\w”代表的意思是[A-Za-z0-9_]中任意一个字符。“.” 代表的意思是任意字符,其范围比“\w”代表的意思要广。

下面是具体的代码演示,如下图所示:

Python正则表达式初识(八)

可以看到此时用的是特殊字符中括号来代替特殊字符“\w”,匹配成功。

2、现在将[A-Za-z0-9_]改为\w,如下图所示。

Python正则表达式初识(八)

可以看到仍然可以匹配成功。

3、将原始字符串改为“加A油”,如下图所示。

Python正则表达式初识(八)

可以看到仍然可以匹配成功。

4、将原始字符串改为“加_油”,如下图所示。

Python正则表达式初识(八)

可以看到仍然可以匹配成功。

5、当将原始字符串改为“加-油”,如下图所示。

Python正则表达式初识(八)

可以看到此时就不可以匹配成功了,因为字符“-”并在包括在\w涵盖的范围之内。

6、“\W”代表的意思与“\w”刚刚相反,也就是匹配除了[A-Za-z0-9_]之外的其他字符。接上一步的例子,此时将“\w”改为“\W”,如下图所示。

Python正则表达式初识(八)

可以看到此时就匹配成功了。

7、将原始字符串“加-油”改为“加 油”,中间有空格,其他保持不变,如下图所示。

Python正则表达式初识(八)

很显然,使用“\w”肯定不能匹配成功,但使用“\W”便可以成功的进行匹配。

8、为了进一步加强对这两个符号的理解,将原始字符串中的中划线“-”改为下划线“_”,其他的保持不变,如下图所示。

Python正则表达式初识(八)

此时可以看到匹配不成功,无任何输出。

小伙伴们,关于大“W”和小“w”的用法,你们get到了吗?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python正则表达式初识(七)

继续分享Python正则表达式的基础知识,今天给大家分享的特殊字符是“\s”、“\S”,具体的教程如下。

Python正则表达式初识(七)

1、“\s”代表的意思是匹配空格,匹配模式“加\s油”代表的是字符“加”和“油”之间有空格的意思,如下图所示。

Python正则表达式初识(七)

可以看到原始字符串中“加”和“油”之间有空格,与匹配条件相符合,所以匹配成功。

2、为了加强理解,现在将原始字符串改为“加加油”,字符中间不为空格,保持匹配模式不变,如下图所示。

Python正则表达式初识(七)

可以看到无任何输出,说明匹配不成功。

3、如果“加”和“油”之间有多个空格的话,则只需要在匹配模式中将“加\s油”改为“加\s+油”即可,如下图所示。

Python正则表达式初识(七)

4、“\S”代表的意思与“\s”代表的意思刚刚相反,也就是说匹配的那个字符只要不是空格,都可以匹配。如下图所示,继续用第二步那个例子,只要将匹配模式中的“\s”改为“\S”,其他的保持不变,如下图所示。

Python正则表达式初识(七)

可以看到此时就可以匹配成功。

5、而将原始字符串改为“加 油”,两个字符中间有个空格,匹配模式不变,如下图所示。

Python正则表达式初识(七)

可以看到此时无任何输出,说明匹配不成功。

6、同样的,如果要匹配多个非空白字符的话,只需要将“\S”改为“\S+”即可,如下图所示。

Python正则表达式初识(七)

关于大“S”和小“s”的介绍就到这里了,小伙伴们get到了吗?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python正则表达式初识(六)

继续分享Python正则表达式基础,今天给大家分享的正则表达式特殊符号是“[]”。中括号十分实用,其有特殊含义,其代表的意思是中括号中的字符只要满足其中任意一个就可以。其用法一共有三种,分别对其进行具体的代码演示,在最后进行总结,具体的教程如下。

1、如下图所示,匹配模式为[abcd],在这里正则表达式代表的意思是字符串第一个字符是abcd四个字符中的任意一个,然后后面的字符是“cpeng123”,如果满足匹配条件,则输出结果,如果不满足,则不显示任何结果,如下图所示。

Python正则表达式初识(六)

很显然原始字符串的第一个字符是d,和匹配模式相接,所以输出结果。

2、为了更好的加强理解,现在将原始字符串改为“acpeng123”,其他部分不做改动,如下图所示。

Python正则表达式初识(六)

可以看到匹配的结果是“acpeng123”,匹配成功。

3、为进一步理解中括号的意思,现在将原始字符串改为“ecpeng123”,其他部分不做改动,如下图所示。

Python正则表达式初识(六)

此时可以看到没有任何结果输出,因为在中括号中没有对应的匹配字符,满足不了匹配要求,所以无任何输出。

4、看下面一个例子,提取电话号码,这个在实际应用中十分常见。在这里介绍中括号的另外一种表达方式即[0-9],这个特殊字符代表的意思是数字0到9中的任意一个字符。下面的匹配模式'(1[34578][0-9]{9})’代表的意思是字符串以1开头,然后第二个字符为3、4、5、7、8中任意一个,之后的字符是0到9中的数字,但是限定为9次,也就是说电话号码的长度为1+1+9=11位。如果满足上面的匹配要求,就输出成功,否则就不输出任何的字符。

Python正则表达式初识(六)

如上图,很明显原始字符串满足匹配的要求,所以有输出结果。

拓展知识:[a-z]代表26个英文小写字母;[A-Z]代表26个英文大写字母。

5、为了进一步加强理解,将原始字符串改为160开头的号码,然后进行输出,如下图所示。

Python正则表达式初识(六)

可以看到无任何输出结果。

6、中括号的第三章用法是[^],在中括号中加入特殊字符“^”,表示非,取反的意思。举个栗子,“[^1]”的意思是字符不等于1,下图是代码演示。

Python正则表达式初识(六)

可以看到原始字符串与匹配模式'(1[34578][^1]{9})’匹配成功,因为从第二个字符之后,字符串中就没有1出现,符合匹配规则。

即便是原始字符串中出现非数字的字符,只要不是1,也能够匹配成功,如下图所示。

Python正则表达式初识(六)

7、为了加强理解,先将原始字符串中的号码改为‘18042682515’,在字符串后边加个1,然后匹配模式不改变,如下图所示。

Python正则表达式初识(六)

可以看到此时无任何输出结果,因为原始字符串中出现了1,而匹配模式要求不能出现1,所以匹配不成功。

8、最后总结一下特殊字符中括号的用途。一、中括号中的任意一个字符,如[abcd],代表a、b、c、d这四个字符中的任意一个。

二、表示区间,如[0-9],代表数字0到9中的任意一个。同理[a-z],[A-Z],其代表的意思在上面有提及,在此就不再赘述了。

三、表示非或者取反,专有的表达式是[^],如匹配模式[^1]表示匹配的字符不为1。

四、中括号中的“.”,如匹配模式[.]或“*”,如匹配模式[*],就是纯粹的代表“.”号和“*”号,不再是代表特殊字符中代表的任意字符或出现多次的意思,这点需要特别注意。

Python正则表达式初识(六)

中括号在模式匹配的过程中十分常用,希望小伙伴们都能够好好理解和掌握。

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python正则表达式初识(五)

正则表达式的内容很丰富,今天小编继续给大家分享Python正则表达式的基础知识。今天要给大家的讲的特殊字符是竖线“|”。竖线“|”实质上是一个或的关系。

Python正则表达式初识(五)

1、直接上代码演示,比方说我们需要匹配一个字符串“dcpeng123”,匹配模式为 “(dcpeng|dcpeng123)”,记得匹配模式中要有括号,否则后面的group方法会报错。

Python正则表达式初识(五)

如上图所示,匹配模式“(dcpeng|dcpeng123)”的意思是只要匹配“dcpeng”或者“dcpeng123”中的任意一个,就说明提取成功。“|”实质上是一个“或”的关系,匹配的结果为“dcpeng”可以满足匹配条件,匹配的结果为“dcpeng123”也可以满足匹配条件。所以在这里,正则表达式首先匹配了字符串“dcpeng”,所以打印出来的结果就是“dcpeng”。

2、当我们把匹配模式中两个字符串的顺序调整一下,如下图所示。

Python正则表达式初识(五)

根据第一步的分析步骤,其匹配结果为“dcpeng123”,在此就不再赘述了。

3、如果我们将原始字符串做一下更改,更改为“dcpeng”,而保持匹配模式不变,如下图所示。

Python正则表达式初识(五)

此时的匹配结果为“dcpeng”。原因是匹配模式首先是“dcpeng123”,与原始字符串匹配不上,之后通过特殊字符“|”再定位到“dcpeng”,发现可以与原始字符串匹配上,所以匹配成功,输出匹配结果。

4、如果我们只是想匹配字符串中的一部分,那应该如何做呢?如下图所示,只需要将匹配模式用括号括起来就可以了,而括号外面的部分保持与原始字符串一致即可。

Python正则表达式初识(五)

此时可以看到输出的结果为“dcpeng”。这里容易犯错,很多小伙伴很可能以为结果是“dcpeng123”,只需要记住我们匹配的内容只是在括号中,外边的世界与我们无关。

同样的,如果我们将原始字符串改为“dccpeng123”,保存匹配模式不变,此时的匹配结果为“dccpeng”,如下图所示。

Python正则表达式初识(五)

5、如果真想匹配到外边的结果,就应该再加一层括号,将外边的内容与括进来,入下图所示。当程序运行之后,我们得到的匹配结果是“dccpeng123”。

Python正则表达式初识(五)

当程序运行之后,实际上是以最外层的这个括号为顺序的,然后依次向内进行匹配。当group方法中取第一个括号的内容时,匹配到的结果是最外层括号中的内容,所以是“dccpeng123”。可以看到“123”也被提取出来了。

同理,当group方法中取第二个括号的内容时,匹配到的结果是最二层括号中的内容,所以是“dccpeng”,如下图所示。

Python正则表达式初识(五)

此时可以看到“123”并没有被提取出来,因为此时匹配的内容是“(dcpeng|dccpeng)”。

关于在括号中提取子字符串的用法在网络爬虫中非常常见,也是Python正则表达式的重点学习内容,需要重点掌握。

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python正则表达式初识(四)

今天继续给大家分享Python正则表达式基础知识,主要给大家介绍一下特殊字符“{}”的用法,具体的教程如下。

Python正则表达式初识(四)

特殊字符“{}”实质上也是一个限定词的用法,其限定前面字符所出现的次数,其常用的模式有三种,分别是“{数字}”、“{数字,}”和“{数字1, 数字2}”。举个例子,如“{1}”、“{1,}”和“{1, 3}”。到这里可能大家还不是很清楚,下面依次通过实例来演示一下,加深对特殊字符“{}”的理解。

1、如下图所示,限定字符p前面的字符出现1次,则根据贪婪匹配模式,pap成功匹配到。

Python正则表达式初识(四)

2、如果将匹配模式更改为“.*(p.{2}p).*”,则无任何的输出,如下图所示,因为此时并没有任何的字字符串符合匹配条件。

Python正则表达式初识(四)

3、相应的,我们将原始字符串做一下更改,如下图所示,此时“.*(p.{2}p).*”匹配模式有对应的结果,如下图所示。

Python正则表达式初识(四)

4、特殊字符“{1,}”代表的是前面的字符出现1次及以上;特殊字符“{2,}”代表的是前面的字符出现2次及以上;特殊字符“{3,}”代表的是前面的字符出现3次及以上;以此类推。举个栗子,如下图所示。

Python正则表达式初识(四)

我们要匹配出现p字符前面出现3次及以上的次数,此时子字符串phhhhp被提取出来,但是pap和paap都没有提取到,因为其不满足匹配条件。

5、特殊字符“{1, 3}” 代表的是前面的字符至少出现1次,最多出现3次;特殊字符“{2, 5}” 代表的是前面的字符至少出现2次,最多出现5次;以此类推。举个栗子,如下图所示。

当使用特殊字符“{1, 3}”的时候,如下图所示:

Python正则表达式初识(四)

贪婪模式下,字符串从右边开始往左取,首先遇到相对满足条件的子字符串是phhhhp,但是并不符合规则,因为该子字符串出现的次数为4次,而限定条件为1次到3次,所以这个子字符串不符合匹配条件,尔后继续往前匹配,得到匹配结果paap,满足匹配条件。

6、同理,当使用特殊字符“{3, 5}”的时候,如下图所示:

Python正则表达式初识(四)

根据上一步的分析可以得知,该匹配结果为phhhhp。

小伙伴们,关于正则表达式特殊字符“{}”的用法,你们get到了吗?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python正则表达式初识(三)

前几天给大家分享了Python正则表达式基础(一)Python正则表达式基础(二),感兴趣的小伙伴可以点击进去学习,今天继续给大家分享Python正则表达式基础。

Python正则表达式初识(三)

1、正则表达式特殊字符“+”,其代表的意思“+”号前面的任意字符必须至少出现一次,才能匹配成功。如下图所示,如果没有加特殊字符“+”,则按照前面介绍的贪婪模式从右边进行匹配,输出的结果为“pp”。

Python正则表达式初识(三)

2、现在将匹配模式由之前的“.*(p.*p).*”改为“.*(p.+p).*”,即将特殊字符“*”改为特殊字符“+”,用特殊字符“+”来限定前面的字符出现的次数,至少出现一次。运行程序,得到的结果为“ppp”,如下图所示。

Python正则表达式初识(三)

简单的来理解一下,首先贪婪模式不在赘述,然后匹配到第一个字符p,之后碰到特殊字符“+”,表示匹配任意字符,但该字符至少出现一次,然后再匹配到第二个字符p,才会提取到匹配的字符串。

3、再次来感受一下,将之前的三个ppp改为现在的php,之后再运行程序,如下图所示,得到的结果是php。

Python正则表达式初识(三)

4、如果将之前的三个ppp改为现在的phhp,会有什么样的结果呢?如下图所示,毋庸置疑,答案肯定是phhp。

Python正则表达式初识(三)

因为特殊字符“+”号表示只要任意字符至少出现一次,都会被提取出来。

5、简单的来总结一下,特殊字符“*”和特殊字符“+”都是用来表示字符出现次数的限定词,用于限定前面的任意字符出现的次数。不同的地方在于特殊字符“*”模式下,字符出现的次数可以是0次或者任意多次,而特殊字符“+”模式下,字符出现的次数至少是1次。

Python正则表达式初识(三)

小伙伴们,关于正则表达式特殊字符“*”和特殊字符“+”的理解,你们get到了吧?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】

Python正则表达式初识(二)

前几天给大家分享了Python正则表达式初识(一),介绍了正则表达式中的三个特殊字符“^”、“.”和“*”,感兴趣的伙伴可以戳进去看看,今天小编继续给大家分享Python正则表达式相关特殊字符知识点。

Python正则表达式初识(二)

1、特殊字符“$”代表的意思是结尾字符。举个栗子,正则表达式“3$”,表示匹配以3为结尾的字符串。代码演示如下图所示。

Python正则表达式初识(二)

正则表达式匹配模式“.*3$”代表以3结尾的任意字符的字符串,很显然匹配的结果和原始字符串是一致的,所以有返回结果。

2、如果将正则表达式匹配模式改为“.*4$”,则表示以4结尾的任意字符的字符串,此时是没有任何的输入结果的,如下图所示。

Python正则表达式初识(二)

3、正则表达式特殊字符“?”比较常用,其代表的意思是非贪婪匹配模式。默认情况下,匹配字符串是一种贪婪的匹配,换句话说,默认情况下字符串会根据匹配模式,去匹配最大的长度。

4、下图是一个实例。其中括号代表的是提取字符串的子串,正则表达式会把满足匹配条件的字符串放到括号里边。匹配模式“.*(p.*p).*”代表的意思是:左边的“.* ”的意思是任意字符串,可以是空,也可以是非空的字符串,之后是字符p,中间的“.* ” 的意思也是任意字符串,之后再是一个p,尔后右边的“.* ” 的意思也是任意字符串。目前的逻辑就是将两个p中间的字符串连同p一块取出。

Python正则表达式初识(二)

但是其输出的结果却为“pp”,并不是我们想要的“pccccccccccp”结果。原因是正则表达式的贪婪匹配所致,实际上它是反向匹配的,所以从字符串来看,匹配到的结果是“pp”。

5、如果我们使用非贪婪模式,即将匹配模式“.*(p.*p).*”改为模式“.*?(p.*p).*”,在第一“p”之前加个特殊字符“?”,则运行的结果就如下图所示。

Python正则表达式初识(二)

可以看到匹配模式已经开始从左边开始进行匹配,答案趋向于我们想要的结果。但是在后面却出现了两个p。原因是后面的那个p未指定其为非贪婪模式,所以后面的那个p仍然是从右边开始反向取值的。

6、接下来,我们继续使用非贪婪模式,即将匹配模式“.*(p.*p).*”改为模式“.*?(p.*?p).*”,在第二“p”之前也加个特殊字符“?”,则运行的结果就如下图所示。

Python正则表达式初识(二)

此时可以看到匹配的结果就是我们想要的结果了,原因是此时两个p均采用了非贪婪模式,所以匹配模式,从左到右顺序进行。

7、理解非贪婪模式之后,对于正则表达式的匹配就很好理解了,如下图的结果将返回“pcccp”,非贪婪模式下。

Python正则表达式初识(二)

8、下图的结果将返回“pcccpcccccccpppp”,非贪婪模式和贪婪模式共存的情况下。

Python正则表达式初识(二)

非贪婪模式在网络爬虫的过程中对于字符串的提取非常重要,务必要理解和掌握。小伙伴们,关于正则表达式的特殊字符“$”和“?”的用法,你们get到了吗?

看完本文有收获?请转发分享给更多的人

Python爬虫与数据挖掘

入群请在微信后台回复【入群】