zoukankan      html  css  js  c++  java
  • re 模块, 正则表达式 w+d+ 的重复问题引发的题目解析

    题目

    计算以下代码的结果

    s = "?!.18)dajslj$12.15613sdadw.123sdasda35615.168sndsda$15.6sdasd.sdfsdgw123.156s"
    
    p1 = re.compile("w+.w+d+.+d+")
    print(p1.findall(s)) 
    
    p1 = re.compile("(w+).(w+)((d+).+d+)")
    print(p1.findall(s))  

    答案

    # ['3265sdadw.sdasda35615.168', '6sdasd.sdfsdgw123.156']
    
    # [('3265sdadw', 'sdasda3561', '5.168', '5'), ('6sdasd', 'sdfsdgw12', '3.156', '3')]

    解析

    本题考查 正则分组优先原则以及输出格式

    附带考查 w+ d+ 重复匹配问题

    思考

    第一个  d+ 为什么匹配到的是 5? 不应该是 35615吗?

    如果是认为是 35615 应该是产业以下两种分析方式

    方式一

    很明显 w+ 可以匹配数字字母下划线所以 后面的 35615 都是属于 w+ de 匹配范围,所以这个分析方式绝对是错的

     方式二

     这个分析方式已经基本上都对了, 但是在 w+d+ 一起对数字的处理的时候, 是使用的最小回退, 即值给一位给 d+ 所以不会全部把35615给他

    正确方式

     

    最开始的"12" 为什么不会被 w+ 匹配成功?

    看起来这样子匹配是可以的,貌似。

    但是 第二个 w+d+ 是链接在一起的, 即是要求必须w+后面有数字,因此 w+d+、 就只能匹配到 15313, 然后就没小数点就没办法匹配下去了。

    所以是匹配不成功的。

  • 相关阅读:
    MySQL · 引擎特性 · InnoDB崩溃恢复
    MySQL · 引擎特性 · InnoDB Buffer Pool
    MySQL · 引擎特性 · InnoDB IO子系统
    MySQL · 引擎特性 · InnoDB 同步机制
    docker基本操作命令
    IIS日志导出mysql
    Win10 MySQL Community Server 8.0.17安装
    win10 TortoiseGit 图标不显示
    window环境配置nginx
    windows openssh安装
  • 原文地址:https://www.cnblogs.com/shijieli/p/10800304.html
Copyright © 2011-2022 走看看