学习极客时间的学习笔记

一、正则模式种类

正则有不同的匹配模式,有三种模式,第一:贪婪匹配,第二:非贪婪匹配,第三:独占模式

主要区别在于匹配是一次还是多次,长度尽量长还是尽量短

看到这个次数次数的,我们回顾一下量词的定义:

其中的 * 和 + 你可能觉得可以用 {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 正则表达式-量词与贪婪相关推荐

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

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

  2. python正则表达式贪婪匹配_Python正则表达式教程之三:贪婪/非贪婪特性

    之前已经简单介绍了Python正则表达式的基础与捕获,那么在这一篇文章里,我将总结一下正则表达式的贪婪/非贪婪特性. 贪婪 默认情况下,正则表达式将进行贪婪匹配.所谓"贪婪",其实 ...

  3. 匹配正则_程序员入门基础:python正则表达式贪婪匹配和非贪婪匹配

    此文为python正则表达式的高阶入门,正则基础入门请参考程序员入门基础:python的正则表达式. 一.贪婪匹配和非贪婪匹配 举例说明概念: print('非贪婪匹配',re.search('el+ ...

  4. python正则匹配找到所有的浮点数_Python随笔17:Python正则表达式基础(4):贪婪匹配和最小匹配...

    Python正则表达式 贪婪匹配/最小匹配 Re库默认采用贪婪匹配,即匹配最长的子字符串.在量词后面加一个"?",即可由贪婪匹配化为最小匹配. '*'用于将前面的模式匹配0次或多次 ...

  5. python 正则表达式 非贪婪,python中如何使用正则表达式的非贪婪模式示例

    前言 本文主要给大家介绍了关于python使用正则表达式的非贪婪模式的相关内容,分享出来供大家参考学习,下面话不多说了,来一起详细的介绍吧. 在正则表达式里,什么是正则表达式的贪婪与非贪婪匹配 如:S ...

  6. [小小明]Python正则表达式速查表与实操手册

    v0.3下载地址:https://download.csdn.net/download/as604049322/14504394 目录 文章目录 文档简介 作者简介 阅读建议 版权声明 Python ...

  7. 【转摘】PYTHON 正则表达式

    网上转的一篇,把正则的规则系统的分类了.. 好文,共享,备查 ~~~~~~~~~~~ http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.ht ...

  8. Python正则表达式-2

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  9. Python正则表达式指南

    Python正则表达式指南 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表 ...

  10. python正则表达式指南_Python正则表达式指南(转)

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

最新文章

  1. day07-字符编码、文件操作
  2. 安装Macports遇到的问题和PATH设置
  3. python使用函数的优点-Python用了这么多年,总结出超实用的功能和特点
  4. java环境变量设置--编写一年java,竟不会配变量了
  5. 思科超融合:主推HyperFlex,押注HCI
  6. CDOJ 1070 秋实大哥打游戏 带权并查集
  7. python如何绘制曲线图_只会柱状图、饼状图、折线图怎么行,来用Python画个热力图...
  8. 我是一位老师,讲课是我的乐趣,可是……
  9. Koa框架——coderhub实战
  10. 「干货」不逼自己一下不知道自己多牛逼[python篇]
  11. 【Flink】Flink Invalid timestamp -1 Timestamp should always be none-negative or null
  12. java jersey get_java – Jersey GET请求可以返回一个多态实体吗​​?
  13. 创建一个带有Event Receiver的List Definition
  14. 【视野】阿里达摩院做AI这两年
  15. KVO 的代码简洁使用
  16. c语言智能插座多线程原理,主芯片HLW8012 - 基于WiFi智能插座的智能家居电路及原理解析—电路精选(49)...
  17. 成本更低、更优观看体验——自研S265编解码器解析
  18. 出现跨域问题的原因及其解决方法
  19. 核心交换机链路聚合、冗余、堆叠、热备份
  20. 浅谈深度链接除了跳转还能做些什么?—MobLink

热门文章

  1. 【Pygame小游戏】确实会玩—教你如何在”吃豆豆“上完美躺赢……(收藏起来偷偷学)
  2. 专科转行学java_IT技术学费昂贵,大专生转行学IT有必要去培训班吗
  3. 修改虚拟机名称和主机名称
  4. 利用函数wavread对语音信号进行采样_语音信号的语谱图特征提取(一)
  5. Linux pthread详解
  6. Win7下安装Ubuntu(双硬盘)的简要步骤
  7. Spark SQL操作JSON字段小Tips
  8. 华硕x450jn拆机_华硕笔记本电脑X450JB拆卸并安装固态驱动器
  9. 吴22名广西农民工广东讨薪 返途被追砍(转载)
  10. 一元云购系统对接短信功能图文教程—【V4版】