数据处理(1.2)-python 正则表达式-量词与贪婪
学习极客时间的学习笔记
一、正则模式种类
正则有不同的匹配模式,有三种模式,第一:贪婪匹配,第二:非贪婪匹配,第三:独占模式
主要区别在于匹配是一次还是多次,长度尽量长还是尽量短
看到这个次数次数的,我们回顾一下量词的定义:
其中的 * 和 + 你可能觉得可以用 {m,n} 替代,但其实没那么简单
比如用 a+ 处理 aaabb
import re
# 检索 a
re.findall(r"a+","aaabb")
# ["aaa"]
假如用 a* ,则可以看到 4 个匹配结果,
import re
re.findall(r'a*','aaabb')
# ['aaa','','','']
1. 贪婪模式
在正则中,表示次数的量词默认是贪婪的。在贪婪模式下,尽可能的最大长度去匹配
2. 非贪婪模式(lazy)
匹配单个字符,在量词后加上 ?
import re
re.findall(r"a*","aaabb")
# ['aaa','','','']
re.findall(r'a*?','aaabb')
# ['','a','','a','','a','','','']
3. 独占模式
什么是独占模式呢?我们需要搞明白什么是回溯
比如上面两个例子,第一个在匹配y时,匹配成功两个 y 以后,会尝试再吃一个 y ,看能不能凑够 3 个y,结果吃下去的是 z,那就会把 z 从匹配字符里吐出来,再用正则表达式的 z 去寻找匹配,就这时才成功匹配 xyyz。这个就是回溯的过程
而独占模式就是尽可能多的去匹配,如果匹配失败就结束。不会进行回溯,方法是:
在量词后加上一个 + 号
在 python re模块中没有独占模式,我们需要这样:
import regex
regex.findall(r'xy{1,3}z','xyyz') # 贪婪模式
# ['xyyz']
regex.findall(r'xy{1,3}+z','xyyz') # 独占模式
# ['xyyz'}
regex.findall(r'xy{1,3}+yz','xyyz') # 独占模式
^([A-Za-z0-9._()&'\- ]|[XXXX越南语]+$
脱字符 ^ 表示正则开头,美元符号 $ 表示以正则结尾。
这里用独占模式就节省了大量的计算资源
课后练习题
对于一篇英文文章,单词与单词之间用空格隔开,在引号里的一到多个单词表示特殊含义,即引号里面的多个单词要作为一个单词,现在需要取出文章中所有单词,假设没有引号以外的其他所有标点符号。
首先,先匹配正常的单词,也就是不在 "" 中的.
\w+
再匹配 " " 中的单词
"[^" ]+"
再用 | 组合,即可
数据处理(1.2)-python 正则表达式-量词与贪婪相关推荐
- Python正则表达式中的贪婪和非贪婪
python贪婪和非贪婪 Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符: 非贪婪则相反,总是尝试匹配尽可能少的字符. 在"*",& ...
- python正则表达式贪婪匹配_Python正则表达式教程之三:贪婪/非贪婪特性
之前已经简单介绍了Python正则表达式的基础与捕获,那么在这一篇文章里,我将总结一下正则表达式的贪婪/非贪婪特性. 贪婪 默认情况下,正则表达式将进行贪婪匹配.所谓"贪婪",其实 ...
- 匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配
此文为python正则表达式的高阶入门,正则基础入门请参考程序员入门基础:python的正则表达式. 一.贪婪匹配和非贪婪匹配 举例说明概念: print('非贪婪匹配',re.search('el+ ...
- python正则匹配找到所有的浮点数_Python随笔17:Python正则表达式基础(4):贪婪匹配和最小匹配...
Python正则表达式 贪婪匹配/最小匹配 Re库默认采用贪婪匹配,即匹配最长的子字符串.在量词后面加一个"?",即可由贪婪匹配化为最小匹配. '*'用于将前面的模式匹配0次或多次 ...
- python 正则表达式 非贪婪,python中如何使用正则表达式的非贪婪模式示例
前言 本文主要给大家介绍了关于python使用正则表达式的非贪婪模式的相关内容,分享出来供大家参考学习,下面话不多说了,来一起详细的介绍吧. 在正则表达式里,什么是正则表达式的贪婪与非贪婪匹配 如:S ...
- [小小明]Python正则表达式速查表与实操手册
v0.3下载地址:https://download.csdn.net/download/as604049322/14504394 目录 文章目录 文档简介 作者简介 阅读建议 版权声明 Python ...
- 【转摘】PYTHON 正则表达式
网上转的一篇,把正则的规则系统的分类了.. 好文,共享,备查 ~~~~~~~~~~~ http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.ht ...
- Python正则表达式-2
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- Python正则表达式指南
Python正则表达式指南 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表 ...
- python正则表达式指南_Python正则表达式指南(转)
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...
最新文章
- day07-字符编码、文件操作
- 安装Macports遇到的问题和PATH设置
- python使用函数的优点-Python用了这么多年,总结出超实用的功能和特点
- java环境变量设置--编写一年java,竟不会配变量了
- 思科超融合:主推HyperFlex,押注HCI
- CDOJ 1070 秋实大哥打游戏 带权并查集
- python如何绘制曲线图_只会柱状图、饼状图、折线图怎么行,来用Python画个热力图...
- 我是一位老师,讲课是我的乐趣,可是……
- Koa框架——coderhub实战
- 「干货」不逼自己一下不知道自己多牛逼[python篇]
- 【Flink】Flink Invalid timestamp -1 Timestamp should always be none-negative or null
- java jersey get_java – Jersey GET请求可以返回一个多态实体吗​​?
- 创建一个带有Event Receiver的List Definition
- 【视野】阿里达摩院做AI这两年
- KVO 的代码简洁使用
- c语言智能插座多线程原理,主芯片HLW8012 - 基于WiFi智能插座的智能家居电路及原理解析—电路精选(49)...
- 成本更低、更优观看体验——自研S265编解码器解析
- 出现跨域问题的原因及其解决方法
- 核心交换机链路聚合、冗余、堆叠、热备份
- 浅谈深度链接除了跳转还能做些什么?—MobLink
热门文章
- 【Pygame小游戏】确实会玩—教你如何在”吃豆豆“上完美躺赢……(收藏起来偷偷学)
- 专科转行学java_IT技术学费昂贵,大专生转行学IT有必要去培训班吗
- 修改虚拟机名称和主机名称
- 利用函数wavread对语音信号进行采样_语音信号的语谱图特征提取(一)
- Linux pthread详解
- Win7下安装Ubuntu(双硬盘)的简要步骤
- Spark SQL操作JSON字段小Tips
- 华硕x450jn拆机_华硕笔记本电脑X450JB拆卸并安装固态驱动器
- 吴22名广西农民工广东讨薪 返途被追砍(转载)
- 一元云购系统对接短信功能图文教程—【V4版】