这部分理解一下数量词,为什么要用数量词,想想都知道,如果你要匹配几十上百的字符时,难道你要一个一个的写,所以就出现了数量词。
数量词的词法是:{min,max} 。min 和 max 都是非负整数。如果逗号有而 max 被忽略了,则 max 没有限制。如果逗号和 max 都被忽略了,则重复 min 次。比如,\b[1-9][0-9]{3}\b,匹配的是 1000 ~ 9999 之间的数字( “\b” 表示单词边界),而 \b[1-9][0-9]{2,4}\b,匹配的是一个在 100 ~ 99999 之间的数字。
下面看一个实例,匹配出字符串中 4 到 7 个字母的英文
import rea = 'java*&39android##@@python'# 数量词findall = re.findall('[a-z]{4,7}', a)print(findall) 输出结果:
['java', 'android', 'python'] 注意,这里有贪婪和非贪婪之分。那么我们先看下相关的概念:
贪婪模式:它的特性是一次性地读入整个字符串,如果不匹配就吐掉最右边的一个字符再匹配,直到找到匹配的字符串或字符串的长度为 0 为止。它的宗旨是读尽可能多的字符,所以当读到第一个匹配时就立刻返回。
懒惰模式:它的特性是从字符串的左边开始,试图不读入字符串中的字符进行匹配,失败,则多读一个字符,再匹配,如此循环,当找到一个匹配时会返回该匹配的字符串,然后再次进行匹配直到字符串结束。
上面例子中的就是贪婪的,如果要使用非贪婪,也就是懒惰模式,怎么呢?
如果要使用非贪婪,则加一个 ? ,上面的例子修改如下:
import rea = 'java*&39android##@@python'# 贪婪与非贪婪re_findall = re.findall('[a-z]{4,7}?', a)print(re_findall) 输出结果如下:
['java', 'andr', 'pyth'] 从输出的结果可以看出,android 只打印除了 andr ,python 只打印除了 pyth ,因为这里使用的是懒惰模式。
当然,还有一些特殊字符也是可以表示数量的,比如:
?:告诉引擎匹配前导字符 0 次或 1 次
+:告诉引擎匹配前导字符 1 次或多次
*:告诉引擎匹配前导字符 0 次或多次
把这部分的知识点总结一下,就是下面这个表了:
贪 婪 惰 性 描 述
? ?? 零次或一次出现,等价于{0,1}
+ +? 一次或多次出现 ,等价于{1,}
* *? 零次或多次出现 ,等价于{0,}
{n} {n}? 恰好 n 次出现
{n,m} {n,m}? 至少 n 次枝多 m 次出现
{n,} {n,}? 至少 n 次出现
5nm和3nm工艺将是台积电未来几年能带来大量营收的工艺
分拆或并购 七大关键词解读LED行业发展
电流测量的基本原理:漏斗放大器
激光电视优缺点盘点 跟液晶电视相比优势究竟在哪
虹科案例 | 风电机组的预测性维护应该如何进行?
详解python正则表达式数量词
区块链中Polkadot网络和Cosmos网络之间的差异介绍
投影机的投影技术
深圳预将九龙山打造成人工智能产业配套中心
shell实例三(编写批量修改扩展名脚本)
华为松山湖欧洲小镇曝光:投资100亿效果就是不一样
国内陶瓷PCB渐升温_陶瓷PCB板到底贵在哪里
R&S CMW100无线通信测试仪拥有高度灵活性和高测试速度
王劲离职换来景驰加入百度Apollo自动驾驶平台
三星ComcastXfinity机顶盒 对话智能家居
HDMI转光纤与同轴SPDIF转光纤的对比
华为P20大势所趋,AI与摄像头结合成为主流
电动机烘干温度是多少_烘干电动机的步骤及注意事项
谷歌加入自主芯片大战 招揽苹果A系列处理器核心研发人员
不让竞品活了?华为云这款轻量应用服务器更强规格来袭!