老猿在分析《Python正则表达式\W+和\W*匹配过程的深入分析》中的问题时,想到一个问题,如果“re.split(’(\W*)’,‘Hello,world’)”的处理如果换成非贪婪模式会怎么样,根据老猿的预测,由于在’Hello,world’中没有连续的非单词字符,因此贪婪模式处理和非贪婪模式结果应该一样,如是测试了一下看看效果:

>>> re.split('(\W*)','Hello,world') #贪婪模式
['', '', 'H', '', 'e', '', 'l', '', 'l', '', 'o', ',', '', '', 'w', '', 'o', '', 'r', '', 'l', '', 'd', '', '']
>>> re.split('(\W*?)','Hello,world') #非贪婪模式
['Hello,world']
>>>

看到这结果老猿完全懵圈了,这完全推翻了《Python正则表达式\W+和\W*匹配过程的深入分析》的分析过程。但执行结果肯定是正常的,肯定是老猿自己的问题,大家觉得问题出在哪里呢?

不卖关子了,《Python正则表达式\W+和\W*匹配过程的深入分析》的分析过程应该是没有问题的,问题出在输入的问号上,半角的问号被输入成了全角问号,导致匹配不到对应的搜索文本,所以就将原串作为列表的元素整个返回了。其实结果也告诉我们没有分割成功,结果中的元素只有一个,而不是两个,因为它们是一个单引号标记的字符串。只是才开始老猿没仔细看,把字符串中间的逗号看成了元素分割的逗号,才闹了这么个乌龙。上述语句真正的非贪婪模式执行结果如下:

>>> re.split('(\W*?)','Hello,world') #非贪婪模式
['', '', 'H', '', 'e', '', 'l', '', 'l', '', 'o', '', '', ',', '', '', 'w', '', 'o', '', 'r', '', 'l', '', 'd', '', '']

看起来与“re.split(’(\W*)’,‘Hello,world’)”贪婪模式的结果相同,其实还是有些不同的,这个不同点正好体现出贪婪模式和非贪婪模式的区别,具体是怎么回事感兴趣的可以分析一下。

这个案例类似的场景老猿遇到过多次,写出来聊博大家一笑。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!

Python正则表达式书写容易碰到的陷阱:\W*和\W*?匹配过程遇到的问题的更多相关文章

  1. Python正则表达式re模块学习遇到的问题

    Python正则表达式处理的组是什么? Python正则表达式处理中的匹配对象是什么? Python匹配对象的groups.groupdict和group之间的关系 Python正则表达式re.mat ...

  2. python正则表达式-re模块

    目录: 一.正则函数 二.re模块调用 三.贪婪模式 四.分组 五.正则表达式修饰符 六.正则表达式模式 七.常见的正则表达式 导读: 想要使用python的正则表达式功能就需要调用re模块,re模块 ...

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

    今天分享正则表达式最后一个特殊字符“\d”,具体的教程如下. 1.特殊字符“\d”十分常用,其代表的意思是数字.代码演示如下图所示. 其中“+”的意思是表示连续,在这里代表的意思是连续的数字.但是输出 ...

  4. python正则表达式中括号的作用,形如 "(\w+)\s+\w+"

    先看一个例子: import re string="abcdefg acbdgef abcdgfe cadbgfe" #带括号与不带括号的区别 regex=re.compile(& ...

  5. Python正则表达式\W+和\W*匹配过程的深入分析

    在学习re.split函数的处理过程中,发现执行如下语句及返回与老猿预想的不一致: >>> re.split('\W*','Hello,world') ['', 'H', 'e', ...

  6. python 正则表达式中反斜杠(\)的麻烦和陷阱

    这里是一点小心得:由于下面两个原因,在正则表达式中使用反斜杠就会产生了一个双重转换的问题. (1).python自身处理字符串时,反斜杠是用于转义字符 (2).正则表达式也使用反斜杠来转义字符     ...

  7. 比较详细Python正则表达式操作指南(re使用)

    比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...

  8. Python天天美味(15) - Python正则表达式操作指南(re使用)(转)

    http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...

  9. 一个关于Python正则表达式的快速使用手册

    一直在纠结自己的博客到底应该写一些什么东西,这几天发现自己的正则用的不是很熟练,于是想要写一篇关于正则表达式的博客,目的就是为了让自己以后要用而又不会的时候不至于像无头苍蝇一样到处乱撞. 有些人在碰到 ...

随机推荐

  1. Git操作:使用.gitignore来管理VS工程

    在使用Git管理Visual Studio的工程时,经常会碰到这种情况: 整个工程文件夹有100多M,而源代码只有100多K.如果全部添加进Git,那每次编译时产生100M垃圾,10次Git提交就会使 ...

  2. 强迫自己学习Jquery三

    元素定位问题 offset 和 position必须要好好看一下,

  3. 3. Hive相关知识点

    以下是阅读<Hive编程指南>后整理的一些零散知识点: 1. 有时候用户需要频繁执行一些命令,例如设置系统属性,或增加对于Hadoop的分布式内存,加入自定的Hive扩展的Jave包(JA ...

  4. 在Linux下安装C++的OpenCV 3

    最近在看<学习OpenCV3>这本书,所以记录下我在ubuntu16.4下搭建C++版本OpenCV 3.4.5的过程.首先请确保cuda,gcc, g++都安装好了,我这里是cuda 1 ...

  5. nice-ni 耗光cpu

    可以看到 低优先级的进程 暂用了比较高的CPU时间. top 命令中可以看到 NI 为19, 其优先级最低 但是使用cpu 最高. 说明这个进程需要经行优化了, 通过gdb 发现此进程一直都在处理报文 ...

  6. kafka常见面试题

    1.Kafka 中的 ISR(InSyncRepli).OSR(OutSyncRepli).AR(AllRepli)代表什么? 1.AR = ISR+OSR ISR: kafka 使用多副本来保证消息 ...

  7. lua调用dll demo

    使用的是lua5.3 DllMain.cpp 1 //生成的dll 是 lua_add53.dll 2 //luaopen_lua_add 3 extern "C" { 4 #in ...

  8. java多线程---张孝祥

    1.java web 中,一次http请求是一个任务,因为服务器里面有线程池的,存在一个线程处理多个请求任务. 2.在java中,vector,hashtable,concurrentHashMap是 ...

  9. Redis在springboot项目的使用

    一.在pom.xml配置redis依赖 <!-- redis客户端代码 --> <dependency> <groupId>org.springframework. ...

  10. 字符串匹配—KMP算法

    KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用匹配失败后 ...