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

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

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

贪婪算法:

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

非贪婪算法:

贪婪匹配:在整个表达式匹配成功的前提下,尽可能少的匹配 
表达方式: .* ? .+? .?? ·······

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

import re

html = """
<html>
<div><p>九霄龙吟惊天变</p></div>
<div><p>风云际会浅水游</p></div>
</html>
""" #贪婪匹配
pattern = re.compile('<div><p>.*</p></div>',re.S) #表达式为: .*
r_list = pattern.findall(html)
print(r_list) #非贪婪匹配
pattern = re.compile('<div><p>.*?</p></div>',re.S) #表达式为: .*?
r_list = pattern.findall(html)
print(r_list)

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

['<div><p>九霄龙吟惊天变</p></div>\n    <div><p>风云际会浅水游</p></div>']    #将 \n换行  空格  全部匹配了下来
['<div><p>九霄龙吟惊天变</p></div>', '<div><p>风云际会浅水游</p></div>'] #只是将 两个div中的内容匹配了下来

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

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

正则算法子模式的应用

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

pattern = re.compile('<div><p>(.*?)</p></div>',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正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用的更多相关文章

  1. Python之路第六天,基础(7)-正则表达式(re)

    Python RE模块(正则表达式) 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成 ...

  2. Python爬虫入门(7):正则表达式

    下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串” ...

  3. Python学习笔记(三十一)正则表达式

    ---恢复内容开始--- 摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 ...

  4. python学习笔记(一)——关于正则表达式的学习小结

    python中提供了re这个模块提供对正则表达式的支持. 一.正则表达式常用到的一些语法(并非全部): . 匹配任意单个字符 [...] 匹配单个字符集 \w 匹配单词字符,即[a-zA-Z0-9] ...

  5. python网络爬虫之解析网页的正则表达式(爬取4k动漫图片)[三]

    前言 hello,大家好 本章可是一个重中之重,因为我们今天是要爬取一个图片而不是一个网页或是一个json 所以我们也就不用用到selenium模块了,当然有兴趣的同学也一样可以使用selenium去 ...

  6. python爬虫—爬取英文名以及正则表达式的介绍

    python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一.  爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...

  7. python爬虫之小说网站--下载小说(正则表达式)

    python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/244 ...

  8. Nginx的Rewrite正则表达式,匹配非某单词

    Nginx的Rewrite正则表达式,匹配非某单词 由于要rewrite一个地址从 /mag/xx/xxx/ -> /m/xxx 但原先 /mag/xx/more/ 要保留 这就得写一个比较奇特 ...

  9. python爬虫知识点总结(五)正则表达式

    在线正则表达式匹配:http://tool.oschina.net/regex 正则表达式学习:https://c.runoob.com/front-end/854 一.什么是正则表达式? 常见匹配模 ...

随机推荐

  1. Eclipse批量注释、批量缩进、批量取消缩进技巧

    1.批量注释:选中若干行,按"Ctrl"+"/" 2.批量缩进:选中若干行,按TAB 3.批量取消缩进:选中若干行,按SHIFT+TAB

  2. CodeForces 340E Iahub and Permutations 错排dp

    Iahub and Permutations 题解: 令 cnt1 为可以没有限制位的填充数字个数. 令 cnt2 为有限制位的填充数字个数. 那么:对于cnt1来说, 他的值是cnt1! 然后我们对 ...

  3. CF1072A Palindromic Twist 思维

    Palindromic Twist time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  4. bzoj 2726 任务安排 斜率优化DP

    这个题目中 斜率优化DP相当于存在一个 y = kx + z 然后给定 n 个对点 (x,y)  然后给你一个k, 要求你维护出这个z最小是多少. 那么对于给定的点来说 我们可以维护出一个下凸壳,因为 ...

  5. 天梯杯 PAT L2-013 红色警报

    战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...

  6. JS数据结构第六篇 --- 二叉树力扣练习题

    1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...

  7. Netty源码分析 (五)----- 数据如何在 pipeline 中流动

    在上一篇文章中,我们已经了解了pipeline在netty中所处的角色,像是一条流水线,控制着字节流的读写,本文,我们在这个基础上继续深挖pipeline在事件传播 Unsafe 顾名思义,unsaf ...

  8. MySQL 数据库出现导入xls数据出现1062主从错误错误问题解决方案

    今天把xls数据表导入MySQL数据库时发现出现1062错误    ,并且有20-700条数据一直导入不了所以开始找解决方案. 解决方案1:   数据库表设计问题导致相同字段的重复数据不能导入   解 ...

  9. 基于servlet的图书管理系统

    该项目是Java语言开发的图书管理系统,IDE采用eclipse,技术采用servlet,数据库使用mysql,前端页面采用bootstrap框架,简介美观. 系统具备基础的功能,读者可以注册登录,登 ...

  10. ReentrantLock——可重入锁的实现原理

    一. 概述 本文首先介绍Lock接口.ReentrantLock的类层次结构以及锁功能模板类AbstractQueuedSynchronizer的简单原理,然后通过分析ReentrantLock的lo ...