python贪婪和非贪婪

Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;

非贪婪则相反,总是尝试匹配尽可能少的字符。

在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。

>>> s="This is a number 234-235-22-423"
>>> r=re.match(".+(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'4-235-22-423'
>>> r=re.match(".+?(\d+-\d+-\d+-\d+)",s)
>>> r.group(1)
'234-235-22-423'
>>>

正则表达式模式中使用到通配字,那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串,在我们上面的例子里面,“.+”会从字符串的启始处抓取满足模式的最长字符,其中包括我们想得到的第一个整型字段的中的大部分,“\d+”只需一位字符就可以匹配,所以它匹配了数字“4”,而“.+”则匹配了从字符串起始到这个第一位数字4之前的所有字符。

解决方式:非贪婪操作符“?”,这个操作符可以用在"*","+","?"的后面,要求正则匹配的越少越好。

>>> re.match(r"aa(\d+)","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(\d+?)","aa2343ddd").group(1)
'2'
>>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
'2343'
>>>

Python正则表达式中的贪婪和非贪婪相关推荐

  1. python 正则表达式 re (.*?)和(.*)的区别(贪婪模式非贪婪模式)惰性匹配

    贪婪模式 .* 非贪婪模式 .*? 1. .匹配任意除换行符"\n"外的字符: 2. *表示匹配前一个字符0次或无限次: 3. +或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*? ...

  2. Python中的贪婪和非贪婪

    Python贪婪和非贪婪 Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符: 非贪婪则相反,总是尝试匹配尽可能少的字符. 在"*",& ...

  3. java正则表达式非贪婪_正则表达式中的贪婪与非贪婪匹配模式

    1.首先看看下面的例子: try{ str=" abcdefg abcdefghijkl "; re1=str.match(/ [\W\w]+?/ig); alert(" ...

  4. python基础(十二):正则、re模块、贪婪和非贪婪

    正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 元字符:在 ...

  5. python re的贪婪和非贪婪匹配

    正则表达式通常用于在文本中查找匹配的字符串.Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符:非贪婪则相反,总是尝试匹配尽可能少的字符.在"*& ...

  6. python贪婪匹配_python re模块匹配贪婪和非贪婪模式详解

    python re模块匹配贪婪和非贪婪模式详解 这篇文章主要介绍了python re模块匹配贪婪和非贪婪模式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...

  7. python贪婪匹配和非贪婪匹配_Python关于正则贪婪与非贪婪特性的详解

    这篇文章主要介绍了Python正则表达式中贪婪/非贪婪特性的相关资料,文中通过示例代码介绍的很详细,对大家具有一定的参考价值,需要的朋友下面来一起看看吧. 之前已经简单介绍了Python正则表达式的基 ...

  8. PHP正则匹配效率,PHP 正则表达式效率 贪婪、非贪婪与回溯分析(推荐)

    先扫盲一下什么是正则表达式的贪婪,什么是非贪婪?或者说什么是匹配优先量词,什么是忽略优先量词? 好吧,我也不知道概念是什么,来举个例子吧. 某同学想过滤之间的内容,那是这么写正则以及程序的.$str ...

  9. 正则表达式贪婪与非贪婪模式

    正则表达式贪婪与非贪婪模式 之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意. 1.什么是正则表达式的贪婪与非贪婪匹配 如:Stri ...

最新文章

  1. AI算法工程师必备技术,快快积累!
  2. 钮扣电池电压电量_纽扣厂
  3. 不喜欢写测试的朋友看过来,与你分享写测试的经验 做一个爱写测试的程序员...
  4. 51. N皇后/52. N皇后 II
  5. 微信公众平台开发(45)食物营养及热量查询
  6. PHP 下载远程图片
  7. 蛮力法求最大字段和时间复杂度_蛮力法
  8. Atitit layout art 布局的艺术目录1. SpringLayout 类 弹簧布局管理器 12. BoxLayout( html默认布局) 11.SpringLayout
  9. 网络工程师面试常见问题:OSPF篇
  10. 【测试】史上最详细的测试用例设计方法讲解
  11. 苹果mp3软件_flac、WAV、m4a等音频格式转成MP3 ,一键搞定!
  12. ZDNET的一个技术博客评选结果
  13. 全网首发国内联邦学习框架研究
  14. ssh-keygen:you don't exist,go away
  15. Java实习生常规技术面试题每日十题Java基础(六)
  16. XXL-JOB原理--任务调度中心执行器注册(三)
  17. 绝对值不等式 AcWing 104. 货仓选址
  18. iPhone固件下载地址
  19. 彻底解决机械硬盘经常卡顿2秒问题
  20. c# WGS84坐标转换成UTM坐标

热门文章

  1. usermod使用方法
  2. 【直播回顾】阿里高级开发工程师紫思:闲鱼多业务隔离框架SWAK...
  3. Django + react + 阿里云ecs 前后端分离部署上线
  4. Xcode 9.0 beta 3 GPUImage崩溃问题(presentBufferForDisplay)
  5. SCVMM2012 SP1 之虚拟机克隆
  6. 用简单的代码测一测你是否真的了解:Asp.Net中的事件和委托的实现
  7. 面试:MySQL 架构
  8. 当async/await遇上forEach
  9. 容器编排技术 -- Kubernetes 在 Namespace 中配置默认的CPU请求与限额
  10. ModuleNotFoundError: No module named 'cv2'