zoukankan      html  css  js  c++  java
  • 正则中的坑。。。

    最近学习到了正则部分,刚开始接触的时候,有些东西不好理解,加之正则的知识点很零散,很多方法加上量词,就能组合出很多的情况。下面的坑是我遇到的如果有同样疑问的同学可以参考一下。

    A

    >>> re.match(r"a{1,3}","aaabbaa").group()
    'aaa'

    B

    >>> re.match(r"a{1,3}?","aaabbaa").group()
    'a'


    C

    >>> re.match(r"a{1,3}?b{2}","aaabbaa").group()
    'aaabb'

    D

    >>> re.match(r"a{1,3}?b{,2}","aaabbaa").group()
    'a'

    疑问1:

    为什么在B栗子中量词?抑制了正则的贪婪,但是C中并没有。

    疑问2:

    栗子D中将b的匹配次数做了最大限制,为什么量词?又成功抑制了正则的贪婪。

    为了搞清楚,先说下背景知识。

    量词?表示匹配0次或者1次,当匹配到0次时返回空字符串‘’

    {m,n}表示匹配m-n次。

    {m,}表示最小匹配m次,最大匹配不设上限。

    {,n}表示最小匹配0次,注意是包含0次的,最大匹配n次。

    空字符串加上一个字符串返回字符串本身

    >>> ''+"a"
    'a'

    栗子B中要匹配a 1次到3次,但是被量词?抑制了所以按最小的匹配返回一个“a”

    栗子C中由于表达式r"a{1,3}?b{2}"除了匹配a还要匹配b2次,此时为了表达式成立?没有作用,而是找到了结果'aaabb',
    如果后面的字符串中不符合表达式的要求则返回None.如下

    >>> re.match(r"a{1,3}?b{2}","aaabaa").group()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'group'

    栗子D中,由于b{,2}的匹配范围是0-2次,所以此时的情况相当于B只返回了“a”
    像这种坑在正则中还有很多,没办法,只能多实践,见多识广,练就百毒不侵的功夫。

  • 相关阅读:
    python unittest一个简单的实例
    解决python编码格式错误问题
    一个简便的方法,获取某个页面元素的Xpath值
    Xpath基础语法学习
    postman发送带cookie的http请求
    postman测试接口之POST提交本地文件数据
    使用Jmeter录制web脚本
    mac 之 jmeter下载、解压、启动
    第三方测评公司的一些基础理念
    jmeter简单的压测案例——访问百度并发5,持续请求15
  • 原文地址:https://www.cnblogs.com/King-Tong/p/12103872.html
Copyright © 2011-2022 走看看