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

  1. 云栖社区>
  2. 博客>
  3. 正文

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

python进阶者 2018-10-31 20:23:35 浏览1387
展开阅读全文

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

v2-c85b94c4e241c6ee1a49f4ad97c1a7ff_hd.j

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

v2-c7720c3de3ad310ffb40b69afd18f7e7_hd.j


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

v2-d46b9b4d2a36004bd3d58fae72017e4c_hd.j


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

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

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

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

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

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

v2-1fec13880c1dc65adb9376b40605ec3d_hd.j


发现可以匹配得上。

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

v2-4804177aed5bb9f15d45a93f9b71edd2_hd.j


发现可以匹配得上。

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

v2-bc677ae76884aa14241ee87cecb375c9_hd.j


发现可以匹配得上。

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

v2-d82328c5337a4a0273849edf1fa5031f_hd.j


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

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

v2-51db7f8bd14ef525b2b98f018700828c_hd.j


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

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

v2-85a66e26a2e947771fcb585df190f943_hd.j


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

v2-85a66e26a2e947771fcb585df190f943_hd.j

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

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

网友评论

登录后评论
0/500
评论
python进阶者
+ 关注