先引入一下百度百科对于正则表达式的概念:

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

然后我们来引入一下贪婪算法与非贪婪算法的一个概念:

贪婪算法:

贪婪匹配(默认的):在整个表达式匹配成功的前提下,尽可能多的匹配

表达方式: .* .+ .? ·······

非贪婪算法:

贪婪匹配:在整个表达式匹配成功的前提下,尽可能少的匹配

表达方式: .* ? .+? .?? ·······

当然我们通过代码也可以看出来

importre

html= """

九霄龙吟惊天变

风云际会浅水游

"""

#贪婪匹配

pattern = re.compile('

.*

',re.S) #表达式为: .*

r_list=pattern.findall(html)print(r_list)#非贪婪匹配

pattern = re.compile('

.*?

',re.S) #表达式为: .*?

r_list=pattern.findall(html)print(r_list)

我们可以通过输出结果看出来两者的区别

['

九霄龙吟惊天变

\n

风云际会浅水游

']    #将 \n换行 空格 全部匹配了下来

['

九霄龙吟惊天变

', '

风云际会浅水游

'] #只是将 两个div中的内容匹配了下来

可以看出  贪婪算法会在字符串中会找到第一个匹配的元素后就会一直寻找到最后一个匹配的元素  即使中间有重复匹配的元素的元素

非贪婪算法会尽可能的少匹配,即为只要满足就会结束,从而寻找下一组匹配的元素

正则算法子模式的应用

如上代码 如果我想要将 九霄龙吟惊天变  风云际会浅水游这两句诗单独提取出来  就要单独修改代码

pattern = re.compile('

(.*?)

',re.S) #表达式为: (.*?)

r_list =pattern.findall(html)print(r_list)

即为:在需要单独提取出来的元素两边加上()  运行结果为:

['九霄龙吟惊天变', '风云际会浅水游']

下面我们可以进行一些其他的测试 从而更加直观的看到 正则表达式子模式的应用

\w:单次或多次出现的字符   \s:空白字符

s = 'A B C D'p1= re.compile('\w+\s+\w+')print(p1.findall(s))

结果为:

['A B','C D']

s = 'A B C D'p1= re.compile('(\w)+\s+\w+')print(p1.findall(s))

结果为:

['A','C']

s = 'A B C D'p1= re.compile('(\w)+\s+(\w+)')print(p1.findall(s))

结果为:

[('A','B'),('C','D')]

仅供学习!      2019.10.8

python中正则表达式的默认匹配方式为贪婪匹配_python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用...相关推荐

  1. python中 是什么类型_浅谈python中的变量默认是什么类型

    浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...

  2. python 爬虫 贪婪算法和非贪婪算法 match()

    python 爬虫 贪婪算法和非贪婪算法 ** 贪婪算法 (.*):贪婪,就是尽可能匹配多的,一般情况下尽可能多的匹配. 非贪婪(.*?),非贪婪,与贪婪相反,尽可能少的匹配. ** 可能内容有些晦涩 ...

  3. python读取csv文件的方法-CSV文件在Python中的几种处理方式

    Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型.在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文 ...

  4. CSV文件在Python中的几种处理方式

    Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型.在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文 ...

  5. python中cfg_python操作cfg配置文件方式

    *.cfg文件一般是程序运行的配置文件,python为读写常见配置文件提供了一个ConfigParser模块,所以在python中解析配置文件相当简单,下面就举例说明一下具体的操作方法. 写文件代码: ...

  6. Python中创建单例模式的六种方式

    一.基于装饰器实现单例模式 #装饰器实现单例模式def singleTon(cls):def wrapper(*args,**kwargs):if not hasattr(cls,'_instance ...

  7. python的ols_【量化工具】OLS在python中的四种实现方式

    在p-quant中,线性回归应该是最最最重要的统计方法了,没有之一:OLS又是线性回归中最常见的形式,在python中可以利用多个方法来实现 考虑线性回归如下形式 一.sklearn from skl ...

  8. python中异常处理的两种方式_Python 之异常处理

    一 错误和异常 •错误分两种: 1.语法错误 1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 #举列 4 print('hello world' # ...

  9. python中的字符串文本必须用什么括起来_Python标准库---18、文本处理服务:string 常见的字符串操作...

    字符串常量 此模块中定义的常量为: string.ascii_letters 下文所述 ascii_lowercase 和 ascii_uppercase 常量的拼连. 该值不依赖于语言区域. str ...

最新文章

  1. UITableView性能提升和优化(第3章) 之一
  2. java程序设计试题_《Java语言程序设计》期末考试模拟试题——填空题和编程题...
  3. html grid插件,miniGrid:轻量级流布局JS插件
  4. 阿里云边缘云,驱动行业新价值
  5. 怎样使用DBMS_OUTPUT.PUT_LINE?
  6. Oracle 中 call 和 exec的区别
  7. 64位系统目录在那里_旷视王珏:前Adobe首席科学家,手握64项专利,曾助力奥斯卡...
  8. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(二)
  9. 设置EntityFramework中decimal类型数据精度
  10. java版本号分段比较_java实现的版本号比较
  11. geohash redis mysql_Redis geohash 地理位置存储
  12. 客户端 API 开发总结
  13. 性能测试流程及数据分析
  14. 计算机合并单元格怎么操作,excel怎么合并单元格方法
  15. With...As 用法--公用表达式
  16. 淘宝系商品详情系统架构设计
  17. 安卓手机开机动画制作修改教程
  18. 【已解决】VMware Workstation cannot connect to the virtual machine. Make sure you have rights to run the
  19. linux sed替换大小写,linux sed 批量替换字符串
  20. linux查看是否开启超线程

热门文章

  1. ebay注册流程_2017年eBay注册开店流程图文详解
  2. POI 解析Excel,以及引用公式、计算公式的正常解析
  3. 网页设计与制作(项目二--响应式页面制作)
  4. 写几个函数: ①输入10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
  5. 模拟购物车页面全选单选的金额累加
  6. 部署SSL证书,为您的网站保驾护航
  7. 指令大全(win+r)
  8. ES5新增方法、函数调用、this、严格模式、高阶函数(11th)
  9. 小甲鱼最新c语言视频,带你学c带你飞系列
  10. java毕设项目汉服服装租赁系统(附源码)