博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
re 模块, 正则表达式 \w+\d+ 的重复问题引发的题目解析
阅读量:5790 次
发布时间:2019-06-18

本文共 807 字,大约阅读时间需要 2 分钟。

题目

计算以下代码的结果

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, 然后就没小数点就没办法匹配下去了。

所以是匹配不成功的。

 

转载于:https://www.cnblogs.com/shijieli/p/10800304.html

你可能感兴趣的文章
组合逻辑电路
查看>>
POP-一个点击带有放大还原的动画效果
查看>>
UE4材质是什么样的机制
查看>>
使用QTP录制自带Flight小实例
查看>>
JProfiler学习笔记
查看>>
Loadrunner脚本编程(4)-数据类型操作和字符串操作
查看>>
STL 算法
查看>>
分享:Backbone.js 样例站点与入门指南
查看>>
图的基本算法
查看>>
《架构之美》摘录三
查看>>
HTML基础(一)
查看>>
boost.circular_buffer简介
查看>>
Database Appliance并非Mini版的Exadata-还原真实的Oracle Unbreakable Database Appliance
查看>>
网页图片缩放(js)
查看>>
Perl开发的几个小注意事项
查看>>
SQL Server数据库备份恢复常见问题(不断更新中)
查看>>
实现hive proxy1-hive认证实现
查看>>
LinuxShell脚本之利用rsync+ssh实现Linux文件系统远程备份
查看>>
设计和使用维护计划
查看>>
Hyper-V 2016 系列教程3 Hyper-V 组件的添加
查看>>