python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用
先引入一下百度百科对于正则表达式的概念:
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
然后我们来引入一下贪婪算法与非贪婪算法的一个概念:
贪婪算法:
贪婪匹配(默认的):在整个表达式匹配成功的前提下,尽可能多的匹配
表达方式: .* .+ .? ·······
非贪婪算法:
贪婪匹配:在整个表达式匹配成功的前提下,尽可能少的匹配
表达方式: .* ? .+? .?? ·······
当然我们通过代码也可以看出来
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正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用的更多相关文章
- Python之路第六天,基础(7)-正则表达式(re)
Python RE模块(正则表达式) 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成 ...
- Python爬虫入门(7):正则表达式
下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串” ...
- Python学习笔记(三十一)正则表达式
---恢复内容开始--- 摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 ...
- python学习笔记(一)——关于正则表达式的学习小结
python中提供了re这个模块提供对正则表达式的支持. 一.正则表达式常用到的一些语法(并非全部): . 匹配任意单个字符 [...] 匹配单个字符集 \w 匹配单词字符,即[a-zA-Z0-9] ...
- python网络爬虫之解析网页的正则表达式(爬取4k动漫图片)[三]
前言 hello,大家好 本章可是一个重中之重,因为我们今天是要爬取一个图片而不是一个网页或是一个json 所以我们也就不用用到selenium模块了,当然有兴趣的同学也一样可以使用selenium去 ...
- python爬虫—爬取英文名以及正则表达式的介绍
python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一. 爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...
- python爬虫之小说网站--下载小说(正则表达式)
python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/244 ...
- Nginx的Rewrite正则表达式,匹配非某单词
Nginx的Rewrite正则表达式,匹配非某单词 由于要rewrite一个地址从 /mag/xx/xxx/ -> /m/xxx 但原先 /mag/xx/more/ 要保留 这就得写一个比较奇特 ...
- python爬虫知识点总结(五)正则表达式
在线正则表达式匹配:http://tool.oschina.net/regex 正则表达式学习:https://c.runoob.com/front-end/854 一.什么是正则表达式? 常见匹配模 ...
随机推荐
- 实参&形参
实参VS形参 1.实参 argument 实际参数,在函数调用的时候,传递给函数的参数.实参-按值调用 实际参数可以是变量.常量.表达式以及函数 实际参数必须得有确定的值(赋值.输入等),在函数调用时 ...
- P3225 [HNOI2012]矿场搭建 割点 tarjan 双联通分量
https://www.luogu.org/problemnew/show/P3225 题意 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条 ...
- codeforces 245 D. Restoring Table(位运算+思维)
题目链接:http://codeforces.com/contest/245/problem/D 题意:给出一个矩阵b,b[i][j]=a[i]&a[j],b[i][i]=-1.然后求a[i] ...
- CF 988C Equal Sums 思维 第九题 map
Equal Sums time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- JUC(1)
cmd目录切换 D:\>cd /d D:\Program Files\Java\jdk1.8.0_201\bin 1. JUC 简介 在 Java 5.0 提供了 java.util.concu ...
- Spring@Autowired java.lang.NullPointerException 空指针
在使用@Autowired注解注入出现的空指针 java.lang.NullPointerException 可能存在的错误原因: 1.注解的扫描有问题 在xml配置了这个标签后,spring可以 ...
- 解决homebrew下install时出现的问题
在homebrew下install influxdb时出现error: Error: Failure while executing: git config --local --replace-a ...
- Toad客户端连接Oracle数据库报错 ORA-12170:TNS:连接超时
Oracle 客户端连接Oracle数据库报错 ORA-12170:TNS:连接超时 排错步骤: 1. 查看网络是否畅通: 打开cmd,ping数据库IP 2. 查看端口是否畅通: 打开cmd ...
- 使用 jupyter-notebook + python + matplotlib 进行数据可视化
上次用 python 脚本中定期查询数据库,监视订单变化,将时间与处理完成订单的数量进行输入写入日志,虽然省掉了人为定时查看数据库并记录的操作,但是数据不进行分析只是数据,要让数据活起来! 为了方便看 ...
- git bash 界面修改成linux界面
在使用git bash操作git时,$符总是另起一行,给人感觉特别不爽,特别想修改成linux下一样的风格. 在git输入命令: vim ~/.bash_profile 进入insert模式,添加内容 ...