python的re模块中有贪婪匹配和非贪婪匹配之分,当使用*时会匹配零个或多个,使用+时会匹配一个或多个.当使用?在前边特殊符号前时会进行非贪婪匹配,匹配零个或者一个,今天主要讨论非贪婪匹配中存在的坑.

import re

res = re.findall('a?','aaa')
print(res) #['a', 'a', 'a', ''] res1 = re.findall('pa?','paaa')
print(res1) #['pa'] res2 = re.findall('.?','aaaa')
print(res2) #['a', 'a', 'a', 'a', '']

  从上边例子中可以看出,当带有'?'的部分单独处于正则开头并且后边没有其它匹配条件时,匹配结果会多匹配一次,所以在res和res2中会多匹配一个空格;而当'?'部分在正则的中间或者尾部时,则不会出现多一次的情况,所以在res1中结果是'pa'.此时有人会问为什么res会匹配出空格,而res1在没匹配到时候没有空格?看下边的例子:

import re

ret = re.findall('paa?','papaaa')
print(ret)
#['pa', 'paa'] ret1 = re.findall('(paa)?','papaaa')
print(ret1) #['', '', 'paa', '', ''] ret2 = re.findall('a(?:paa)?','apapaaa')
print(ret2) #['a', 'apaa', 'a']

  上边例子中可以看出,只有当正则表达式只有一个单独的分组或者元字符时,加上'?'如果匹配不到才会出现空格,而且在ret1中可以看出,多匹配了一次空格.当正则是一串字符时,匹配出的就没有空字符,所以ret结果为['pa', 'paa'].

  综上所述:当正则表达式中是以带'?'的部分开头并且没有其它匹配内容时,匹配不到会出现空字符,并且会多匹配一次;而当使用两个'?'时,结果肯定是匹配零个;如果正则是一个分组(即一个单独的整体时)才会匹配出空字符.

  

re模块中的非贪婪匹配的更多相关文章

  1. shell 中 贪婪匹配 和 非贪婪匹配

    举个栗子: v=jfedu.shiyiwen.com echo ${v%.*} 一个%为非贪婪匹配,即匹配最短结果.%从右到左进行非贪婪匹配,匹配什么呢? 匹配已 .*的字符. 那么当然是匹配到了.c ...

  2. 正则表达式 整理(\w \s \d 点 贪婪匹配 非贪婪匹配 * + ? {} | [] ^ $ \b 单词边界 分组、re.findall()、re.split()、re.search()、re.match()、re.compile()、re.sub())

    re.findall  匹配到正则表达式的字符,匹配到的每个字符存入一个列表,返回一个匹配到的所有字符列表 一. 匹配单个字符 import re # \w 匹配所有字母.数字.下划线 re.find ...

  3. php正则贪婪匹配与非贪婪匹配一些例子

    http://www.111cn.net/phper/210/55600.htm 贪婪模式匹配的原则是: 在可匹配也可不匹配的情况下, 优先匹配,直到不能匹配成功的情况下,记录备选状态,并把匹配控制交 ...

  4. php正則表達式中的非贪婪模式匹配的使用

    php正則表達式中的非贪婪模式匹配的使用 通常我们会这么写: $str = "http://www.baidu/.com? url=www.sina.com/"; preg_mat ...

  5. 廖雪峰Java9正则表达式-2正则表达式进阶-5非贪婪匹配

    1.贪婪匹配 问题:给定一个字符串表示的数字,判断该数字末尾0的个数? "123000": 3个0 "10100": 2个0 "1001": ...

  6. VIM 用正则表达式,非贪婪匹配,匹配竖杠,竖线, 匹配中文,中文正则,倒数第二列, 匹配任意一个字符 :

    VIM 用正则表达式 批量替换文本,多行删除,复制,移动 在VIM中 用正则表达式 批量替换文本,多行删除,复制,移动 :n1,n2 m n3     移动n1-n2行(包括n1,n2)到n3行之下: ...

  7. PHP正则 贪婪匹配与非贪婪匹配

    $str = ".abcdeabcde"; preg_match('/a.+?e/', $str, $match); print_r($match); Array ( [0] =& ...

  8. Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配

    Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配 //贪婪匹配 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   ...

  9. re 正则匹配的非贪婪匹配

    非贪婪匹配 将尽可能少的匹配内容,当?出现在其他的重复次数后面时会将贪婪模式改为非贪婪模式. ? 如 abc.*? abc.+? 非贪婪匹配:尽可能少的匹配{n,}?{,n}?{n,m}?*? # * ...

随机推荐

  1. 有四个数字能组成多少个互不相同的三位数 --Python

    有四个数字能组成多少个互不相同的三位数? num = 0 for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if i ...

  2. 1.ASP.NET Core Docker学习-Docker介绍与目录

    Docker的优点: 1节约时间,快速部署和启动 2节约成本 3标准化应用发布 4方便做持续集成 5可以用Docker做为集群中的轻量主机或节点 6方便构建基于SOA或者微服务架构 的系统 学习目录: ...

  3. C# DateTime Subtract

    DateTime start = DateTime.Now.AddDays(-20); DateTime end = DateTime.Now; TimeSpan ts = end.Subtract( ...

  4. The Heaviest Non-decreasing Subsequence Problem

    最长非递减子序列变形题,把大于等于10000的copy五次放回去就可以了 ac代码: #include <cstdio> #include <cstring> #include ...

  5. poj 2406 求最短重复字串

    题解: KMP中next数组的巧妙运用.在这里我们假设这个字符串的长度是len,那么如果len可以被len-next[len]整除的话,我们就可以说len-next[len]就是那个最短子串的长度为什 ...

  6. Linux发布java jar包

    打包参考https://www.cnblogs.com/Rexcnblog/p/11357146.html 刚打包出来新鲜的jar 然后开始一顿猛如虎的操作了,把打包的jar和对用的sh文件拷贝到li ...

  7. SpringFramework5.0 @Indexed注解 简单解析

    目录 使用场景 使用方法 原理说明 使用需注意点 案例说明 参考资料 纸上得来终觉浅 绝知此事要躬行 -陆游 最近在看SpringBoot核编程思想(核心篇),看到走向注解驱动编程这章,里面有讲解到: ...

  8. 树节点递归删除--service层

    @Service public class ContentCategoryServiceImpl extends BaseServiceImpl<ContentCategory> impl ...

  9. JSP JSONArray使用遇坑!添加以下6个jar包

    1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...

  10. ASP.NET WEB应用程序(.network4.5)MVC 工作原理

    MVC就是模型.视图.控制器. 项目中控制器对应Controllers目录,视图对应Views目录,模型对应Models目录. 1.当我们创建一个控制器时,比如在Controllers目录新建一个名字 ...