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'
>>>

  

header">([\s\S]+?)sep20匹配任何包括换行空白字符等, 非贪婪模式
header">([\s\S]+)sep20
匹配任何包括换行空白字符等, 贪婪模式

除开某字符

void main() {

  RegExp re = RegExp('<((?!P|\/P).*?)>');  String xx = '12<P xx>a</P haha)>b<haha>c';  String yy = xx.replaceAll(re, '');  print(yy);

}

匹配包括换行符在内的任意字符,以下为正确的正则表达式匹配规则: ([\s\S]*) 同时,也可以用“([\d\D]*)”“([\w\W]*)” 来表示。

在文本文件里, 这个表达式可以匹配所有的英文:[ -~]

这个表达式可以匹配所有的非英文(比如中文):  [^ -~]

下面这个换行可以了.

main(){String a = '''abcadd''';RegExp xx = RegExp("b([^]*)a");var aa = xx.allMatches(a).toList();print(aa);
}

  

转载于:https://www.cnblogs.com/pythonClub/p/10354011.html

python基础:re模块匹配时贪婪和非贪婪模式相关推荐

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

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

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

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

  3. python基础——使用模块

    python基础--使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...

  4. python基础之模块之os模块

    python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...

  5. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

  6. python random库生成伯努利随机数的方法_详解Python基础random模块随机数的生成

    随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入ran ...

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

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

  8. Python基础之模块和包

    Python基础之模块和包 本节将介绍Python中的模块和包的概念及基本用法. 模块 简单来说模块就是一个python文件,我们可以将一些常量.函数.类等封装到一个模块中,然后在程序中使用该模块.模 ...

  9. Python正则表达式中的贪婪和非贪婪

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

  10. Python中的贪婪和非贪婪

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

最新文章

  1. 2020年,5种将死的编程语言
  2. 阿里达摩院员工业余打造“论文知识图谱”工具:极速搜索,完全可视化
  3. 左右HttpClient上传的方法来解决中国的乱码
  4. 设计模式:控制反转(Inversion Of Control)
  5. 经典面试题:将有序数组、有序链表转换成平衡二叉树
  6. pytorch基础知识整理(五) 优化器
  7. ORACLE 普通表转换成分区表(在线重定义)
  8. when is backend date format set in Javascript DateFormat
  9. java中数据结构_JAVA中数据结构总结
  10. (转)C# Color类图示
  11. 数据类型和Json格式[zt]
  12. readelf 和 objdump 例子详解及区别 (ELF文件说明)
  13. 记一个tcp udp测试工具ethrc
  14. vs2010学习版安装与激活
  15. VS Code设置缩进两个字符
  16. Android 头像更换从相册选取崩溃
  17. matlab蚁群算法解决vrp过程,蚁群算法MATLAB解VRP问题
  18. Unity 手游面数控制
  19. 远程调用中间件RPC
  20. NISP一级题库100题

热门文章

  1. 三相全控tc787触发电路_单相逆变三相交流电源怎么办?变频器的三相交
  2. Struts2标签库(四)之非表单标签
  3. 【渝粤教育】国家开放大学2019年春季 0390-22T古代诗歌散文专题 参考试题
  4. 【渝粤题库】陕西师范大学300009 考古学概论
  5. Swift 枚举的用法
  6. springboot实现热部署,修改代码不用重启服务
  7. MySQL查询当天、本周,本月,上一个月的数据
  8. [转]linux signal
  9. [转] 如何看透一个人
  10. 【转】关于DLL的一点介绍