偶然遇到了一道题目:pattern = (3\d*)(5\d*)(7\d*) string = 38654712 ,问第三个括号的返回值是什么?
第一眼看到这个正则表达式的时候,我的想法是。。。。3\d*匹配不是到结尾了吗?第三个括号怎么会有返回值呢?
带着疑问和对出题人的质疑,我把题目放到了Regex tester下测试了一下,结果果然。。。我正则表达式的道行太浅。
上图:
打脸图后来仔细思考了一下原理,其实我们使用正则表达式筛选文本过多,把一个式子割裂开看了。pattern = (3\d*)(5\d*)(7\d*)是一个式子,而string= 38654712是符合这个规则的,因此这个string能够被这个模式串匹配到。如果3\d*直接匹配到尾,这个string便不能够被这个模式串匹配到。在匹配到之后,再拆开来看这3个返回值就不难理解了,第三个()的返回值就是从7开始到结尾的712。
(安利一波Regex tester插件,是pycharm中的一个基于Python re模块写的插件,非常好用,鼠标选择pattern,在text框中便会高亮对应的匹配值,安装教程请自行百度pycharm Regex tester)
(为个人学习、研究或者欣赏,使用此文的,需要标明作者、出处等信息。)
网友评论