python编程例子数词的数量-数量词-python编程入门系列图文教程-PHP中文网教程

来,继续加深对正则表达式的理解,这部分理解一下数量词,为什么要用数量词,想想都知道,如果你要匹配几十上百的字符时,难道你要一个一个的写,所以就出现了数量词。

数量词的词法是:{min,max} 。min 和 max 都是非负整数。如果逗号有而 max 被忽略了,则 max 没有限制。如果逗号和 max 都被忽略了,则重复 min 次。比如,[1-9][0-9]{3},匹配的是 1000 ~ 9999 之间的数字( "” 表示单词边界),而 [1-9][0-9]{2,4},匹配的是一个在 100 ~ 99999 之间的数字。

下面看一个实例,匹配出字符串中 4 到 7 个字母的英文import re

a = 'java*&39android##@@python'

# 数量词

findall = re.findall('[a-z]{4,7}', a)

print(findall)

输出结果:['java', 'android', 'python']

注意,这里有贪婪和非贪婪之分。那么我们先看下相关的概念:

贪婪模式:它的特性是一次性地读入整个字符串,如果不匹配就吐掉最右边的一个字符再匹配,直到找到匹配的字符串或字符串的长度为 0 为止。它的宗旨是读尽可能多的字符,所以当读到第一个匹配时就立刻返回。

懒惰模式:它的特性是从字符串的左边开始,试图不读入字符串中的字符进行匹配,失败,则多读一个字符,再匹配,如此循环,当找到一个匹配时会返回该匹配的字符串,然后再次进行匹配直到字符串结束。

上面例子中的就是贪婪的,如果要使用非贪婪,也就是懒惰模式,怎么呢?

如果要使用非贪婪,则加一个 ? ,上面的例子修改如下:import re

a = '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 次出现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值