正则表达式中用于表示匹配数量的元字符如下:
?   重复0次或1次,等同于{0,1}
*  重复0次或更多次,等同于{0,}
+  重复1次或更多次,等同于{1,}
{n,} 重复n次及以上
上面的表示匹配次数的元字符分为贪婪型和懒惰型2种类型。其表达式分别如下。
贪婪型      懒惰型
*     *?
+     +?
{n,}     {n,}?
贪婪型的匹配会去抓取满足匹配的最长的字符串,这个也是正则表达式的默认的模式。当我们不需要最长的匹配的时候就需要使用懒惰模式。
关于贪婪型和懒惰型的举例如下:
元字符'*'的贪婪模式 '*?'
 >>> s="abcbd"
>>> patt=r'a.*b' #*的贪婪类型
>>> re.search(patt,s).group()
'abcb' >>> patt=r'a.*?b' #*的懒惰类型
>>> re.search(patt,s).group()
'ab'
 >>> s='caaaaab'
>>> patt=r'a.+b' #+的贪婪类型
>>> s='caaaaabcccb'
>>> re.search(patt,s).group() >>> patt=r'a.+?b' #+的懒惰类型
>>> re.search(patt,s).group()
'aaaaab'

下面举例匹配html的例子,假如要匹配标签<li >和</li>之间的内容:

 >>> s=r'my string is:<li>QQemail</li><li>Not read email</a></li>'

 >>> patt=r'<li>.*</li>'
>>> print re.search(patt,s).group()
<li>QQemail</li><li>Not read email</a></li> #贪婪类型,匹配多了 >>> patt=r'<li>.*?</li>'
>>> print re.search(patt,s).group()
<li>QQemail</li> #懒惰类型,匹配刚好
 >>> print re.findall(patt,s)
['<li>QQemail</li>', '<li>Not read email</a></li>']
 

python 的正则表达式 贪婪模式与懒惰模式的更多相关文章

  1. Python中正则表达式简介

    目录 一.什么是正则表达式 二.正则表达式的基础知识 1. 原子 1)普通字符作为原子 2)非打印字符作为原子 3) 通用字符作为原子 4) 原子表 2. 元字符 1)任意匹配元字符 2)边界限制元字 ...

  2. python 正则表达式 贪婪模式的简介和匹配时的几种模式

    看到一篇文章,关于python正则的,http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 贪婪模式与非贪婪模式: 正则表达式通常用于 ...

  3. VIM正则表达式的懒惰模式

    例如有如下一段话: Another whale sighting occurred on , <2004>. AK and HI 要匹配每一个<...>,如果用<.> ...

  4. [\s\S]*?懒惰模式特殊情形

    通常理解[\s\S]*?X (X代表任意指定字符) 表示匹配任何字符的懒惰模式,一旦遇到后面出现的X便停止匹配,但实际不是如此,会尽可能的把后面的内容也匹配进去.如: 表达式 <tr[\s\S] ...

  5. PowerShell正则表达式(一) 定义模式

    PowerShell正则表达式(一) 定义模式 7 29 9月, 2013  在 Powershell tagged 正则表达式 by Mooser Lee 本文索引 [隐藏] 1限定符 2识别IP地 ...

  6. python使用rabbitMQ介绍五(话题模式)

    一.模式介绍 话题模式(Topic)基本思想和路由模式是一样的,只不过路由键支持模糊匹配,符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词 话题模式相当于消息的模糊匹配,或者按照正则匹配.其中 ...

  7. Python的命令模式和交互模式

    Python的命令行模式和交互模式 请注意区分命令行模式和Python交互模式. 在命令行模式下,可以执行python进入Python交互式环境,也可以执行python first.py运行一个.py ...

  8. python shell的交互模式和文本编辑模式

    之前学python的时候,是拿<笨办法学python>练习的. 书里面基本都是以.py文件去写代码,也就是文本编辑模式. 而交互模式(也就是powershell),唯有在input用户输入 ...

  9. python 3 廖雪峰博客笔记(三) 命令行模式与交互模式

    python 的代码一般保存为 .py结尾的文本文件格式 比如 add.py 里写下如下内容 100 + 200 执行 add.py有两种方式: 1. 命令行方式:将python代码写入脚本中执行 p ...

随机推荐

  1. 二分查找 - vb.net

    Module Module1    Sub Main()        Dim array(999) As Integer        Dim searchValue As Integer      ...

  2. (二)Hololens Unity 开发之 语音识别

    学习源于官方文档 Voice input in Unity 笔记一部分是直接翻译官方文档,部分各人理解不一致的和一些比较浅显的保留英文原文 (二)Hololens Unity 开发之 语音识别 Hol ...

  3. ios NSString拼接方法总结

    NSString* string; // 结果字符串 02 NSString* string1, string2; //已存在的字符串,需要将string1和string2连接起来 03   04 / ...

  4. dubbox注解的一个坑

    我和我同事Daniel排查的一个问题,原文是我同事Daniel写的,我做了些修改了补充. 我们dubbox的provider端有很多service开发时没有考虑到幂等问题,于是只能暂时关掉dubbo的 ...

  5. 自己开发轻量级ORM(三)

    上一篇中简单分享了下ORM的设计思路.现在开始讲如何用代码来实现上篇的设计模型. 我们建2个类库来分别抽象数据库表结构关系映射和SQL增删改查操作. 打开VS2010,新建2个类库.分别起名为Mode ...

  6. 文件下载类型__response

    response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据. 例如web浏览器就是通过MI ...

  7. ArcGIS制图表达Representation实战篇2-河流渐变与符号旋转

    ArcGIS制图表达Representation实战篇2-河流渐变与符号旋转 by 李远祥 上一章节主要是从实战中使用规则和几何效果,如何分解制图规则.本章主要还是通过一些特殊要求如河流线宽渐变和符号 ...

  8. CSS的兼容性与BUG处理

    骨灰级清除浮动 .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility ...

  9. hadoop系列一:hadoop集群安装

     转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6384393.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据 ...

  10. 5. UITest测试总结

    1. 什么是Mock 当我们在做单元测试的过程中,为了保持测试又短又快和测试的隔离性,希望尽可能少地去实例化一些具体的组件.在现在面向对象的系统中,被测试的对象很可能会依赖于几个其他的对象,这时候我们 ...