正则表达式中用于表示匹配数量的元字符如下:
?   重复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. Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

    转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之 ...

  2. html 一般标签 常用标签 表格

    body的属性: bgcolor                页面背景色 background            背景壁纸.图片 text                    文字颜色 top ...

  3. C# 结构体 枚举类型

    注意:枚举类型和结构体都属于值类型. 结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的方法: struct student { public int nianl ...

  4. vs2015 动态链接库问题

    问题: 最近要用vs2015编写一个动态链接库,生成动态链接库后,换到另一台windows下发现无法使用. 使用depends检查发现原因是缺少 MSVCP140.DLL等动态链接库. 解决: 将编译 ...

  5. C++ cout 输出小数点后指定位数

    在C中我们可以使用 printf("%.2lf",a);但在C++中是没有格式操作符的,该如何操作: C++使用setprecision()函数,同时必须包含头文件iomanip, ...

  6. HDU 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你

    悼念512汶川大地震遇难同胞——一定要记住我爱你 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  7. LINQ查询表达式基础

    LINQ,语言集成查询(Language Integrated Query)是一组用C#和Visual Basic语言的扩展. 对于编写查询的开发人员来说,LINQ 最明显的"语言集成&qu ...

  8. Codeforces 719B Anatoly and Cockroaches

    B. Anatoly and Cockroaches time limit per test:1 second memory limit per test:256 megabytes input:st ...

  9. Java丨博客系统

    后台界面: 前台界面: 这是一个由我带着刚入门的几位实习生做的一个博客系统,希望给java入门的学习者一个例子,这个系统还需要完善,主体功能是实现了,还差一些细节,如果需要源码的话可以在下方给我留言! ...

  10. 在vim中,使用可视化拷贝(剪切)粘贴文本

    1  定位光标到你想要开始剪切的位置 2 按v选择字符(按V是选择整行) 3 移动光标到你想要结束剪切的位置 4 按d是为了剪切(按y是为了拷贝) 5 移动光标到你想要粘贴的位置 6 按P是在光标之前 ...