文章目录

  • 贪婪模式和非贪婪模式
    • 定义
    • 贪婪模式转换为非贪婪模式

贪婪模式和非贪婪模式

定义

贪婪模式: 默认情况,在整个表达式匹配成功的前提下,尽可能多的匹配。
非贪婪模式(懒惰模式): 在整个表达式匹配成功的前提下,尽可能少的匹配。

贪婪模式转换为非贪婪模式

在匹配重复元字符后加 ?号即可:

贪婪 非贪婪
* *?
+ +?
? ??
{m,n} {m,n}?

例子1(贪婪模式)

In: re.findall(r'ab?', "abbbbbbbbbc")
Out: ['ab']In: re.findall(r'ab{2,5}', "abbbbbbbbbc")
Out: ['abbbbb']

像上面这个例子所呈现的那样,【ab?】表示匹配0次或1次【b】,但是我们的程序,帮我们尽量多的匹配,直接匹配了1次,输出【ab】。而【ab{2, 5}】则是匹配2~5次的【b】,我们的程序同样帮我们尽量多的匹配,直接匹配了5次,输出【abbbbb】。这种匹配模式,就是贪婪模式.

那么我们怎样从贪婪模式变成不贪婪模式呢? 直接在重复元字符后加【?】.

例子2(贪婪模式与非贪婪模式)

In: re.findall(r'\(.+\)',"(abcd)efgh(higkrf)")#贪婪模式
Out: ['(abcd)efgh(higkrf)']In: re.findall(r'\(.+?\)',"(abcd)efgh(higkrf)") #非贪婪模式
Out: ['(abcd)', '(higkrf)']

这个例子中被【()】小括号括住的内容有哪些呢?有【(abcd)efgh(higkrf)】、【(abcd)】、【(higkrf)】
如果用贪婪模式则会全部匹配出来;而如果用非贪婪模式,匹配出【(abcd)】和【(higkrf)】。
这是因为在python中,【(】遇到第一个【)】时,虽然符合匹配要求,但是在贪婪模式之下,py也可认为它是【.】从而继续向后匹配(更多的匹配);而在非贪婪模式下,在满足正则表达式规则的前提下,【(】遇到第一个【)】时,py则会直接将括号中内容,作为被匹配对象,放入结果列表中。

python与正则表达式(part3)--贪婪模式和非贪婪模式相关推荐

  1. 第11.9节 Python正则表达式的贪婪模式和非贪婪模式

    在使用正则表达式时,匹配算法存在贪婪模式和非贪婪模式两种模式,在<第11.8节 Pytho正则表达式的重复匹配模式及元字符"?". "*". " ...

  2. python 正则表达式贪婪模式与非贪婪模式

    1 贪婪模式与非贪婪模式 的理解 1.1 贪婪模式: 是尽可能的多地匹配字符 ,贪婪模式一般是在元符号后面没有添加? 1.2 非贪婪模式(懒惰模式): 是尽可能的少匹配字符,非贪婪模式一般是元符号后面 ...

  3. 匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配

    此文为python正则表达式的高阶入门,正则基础入门请参考程序员入门基础:python的正则表达式. 一.贪婪匹配和非贪婪匹配 举例说明概念: print('非贪婪匹配',re.search('el+ ...

  4. java 正则表达式 非贪婪模式_正则表达式的贪婪模式和非贪婪模式

    一.什么是贪婪模式和非贪婪模式? 定义 贪婪模式:正则表达式趋向于匹配最大长度. 非贪婪模式:正则表达式趋向于匹配最小长度,即一旦匹配到结果就结束. 如何区分? 默认是贪婪模式. 若 量词 后面添加 ...

  5. java 正则表达式 非贪婪模式_详解正则表达式的贪婪模式与非贪婪模式

    什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc"; Patter p="ab*c"; 贪婪匹配:正则表达式一般趋向于最大长度匹配, ...

  6. 正则表达式的贪婪模式、非贪婪模式、占有模式

    文章目录 一.Greediness(贪婪型) (一)贪婪模式示例 (二)贪婪模式的匹配过程(贪婪模式的回溯) 二.Reluctant(勉强型) (一)非贪婪模式示例 (二)非贪婪模式的匹配过程 三.P ...

  7. Python正则表达式中的贪心模式和非贪心模式

    声明:最近发现有人利用我在百度云盘里免费分享的127课Python视频盈利,并声称获得我的授权.在此,我声明,文末百度云盘里的Python视频是免费的,不会授权给任何人或机构进行销售.如果再发现有人卖 ...

  8. Perl——正则表达式之贪婪模式和非贪婪模式

    Perl--正则表达式之贪婪模式和非贪婪模式使用 使用perl进行正则表达式匹配时,常用两种匹配模式,一种是贪婪匹配,一种是非贪婪匹配. 贪婪匹配(greedy match):尽可能匹配最长的内容.默 ...

  9. 正则表达式:贪婪匹配与非贪婪匹配

    情景 之前写过一个简单的爬虫,每天获取公司insgtagram主页的粉丝数用来进行粉丝趋势的展示.代码很简单就是通过获取主页源代码后用正则表达式匹配其中的一串json数据,再用python的json解 ...

最新文章

  1. java拷贝文件权限_boto3 copy vs copy_object关于s3中的文件权限ACL
  2. Java 实现 HTTP 请求的三种方式
  3. c 语言epc编码如何解开,EPC编码结构
  4. django项目简单调取百度翻译接口
  5. nginx tcp代理_nginx——TCP/UDP Load Balancing
  6. 大数的四则运算(加法、减法、乘法、除法)
  7. PHP Object对象转换为Array数组
  8. vim编辑器的快捷键使用
  9. Windows Server 2008 R2正式版尝鲜体验
  10. 相机模型-Extended Unified Camera Model
  11. 2012.4.16总结(二)
  12. 计算机图形学【GAMES-101】4、纹理映射(重心坐标插值、透视投影矫正、双线性插值MipMap、环境光遮蔽AO)
  13. 多功能扩音器索爱S-318,教师、导游们的辅助神器
  14. PR如何对裁剪之后的视频进行resize,指定到期望大小?
  15. Python中用fabric库来远程连接服务器
  16. windows安装Weblogic教程(图文教程超详细版)
  17. nginx的重试机制
  18. 【教科书】软件测试系统测试报告实例(满分模板)
  19. 爬取14000+条数据!分析招聘网站岗位信息
  20. Linux杂碎(杂且碎)

热门文章

  1. 圆形渐变shader_Flutter 中渐变的高级用法
  2. 小红书最新用户量数据_小红书估值高达60亿美元?小红书超过蘑菇街了吗?
  3. Netflix混沌工程手册Part 2:混沌工程原则
  4. tabBar颜色改动
  5. CSS 选择器优先级与效率优化
  6. 关于Cpp中的类型转换操作符
  7. one microblog from 任志强
  8. 035-OpenStack 关闭安全组
  9. mysql数据库通过二进制 -【恢复数据记录】
  10. Java笔记(3) - 使用Spring Cloud Zookeeper + Feign实现服务发现