在这个例子中,我将向你展示如何避免不熟悉正则表达式的人常犯的一些错误。我们将尝试建立一个可以匹配浮点数的正则表达式。我们的正则表达式也应该匹配整数,以及整数部分(即0)没有给出来的浮点数。

乍看之下,下面的正则表达式似乎可以达到预期效果[-+]?[0-9]*\.?[0-9]*。这定义了一个这样的浮点数:可选的符号(正负号),接着是可选的一连串数字(整数部分),接着是可选的点号(小数点),再接着是可选的一连串数字(小数部分)。

用单词拼出这个正则表达式使之更加明显:正则表达式中所有的部分都是可选的。这个正则表达式会把一个符号(正负号)或者一个点号(小数点)当成有效的浮点数。事实上,它会把一个空字符串当成有效的浮点数。如果它被用于像 Perl 或者 PHP 一样的脚本语言来验证用户输入,这个正则表达式将会引起严重的麻烦。

不转义点号也是一个常见的错误。一个没有转义的点号将匹配任何字符,包括点号。如果我们没有转义点号,4.4将被认为是浮点数,4X4也一样。

创建正则表达式时,更重要的是考虑它不应该相配的,而不是它应该匹配的。因为正则表达式引擎是贪婪的,所以上述正则表达式的确可以匹配一个正确的浮点数。但是它也将会相配许多我们不想要,我们必须排除。

在这里有一个更好的尝试:[-+]?([0-9]*\.[0-9]+|[0-9]+)。这个正则表达式将会匹配一个可选的符号(正负号),或者紧接着零个或更多的数字紧接着一个点号(小数点)再紧接着一个或更多的数字(一个整数部分可选的浮点数),或者紧接着一个或更多的数字(整数)。

这是一种更好的定义,所有的匹配都至少包含一个数字,因为[0-9]+ 部分的关系。我们成功的排除了我们不想要的匹配:那些不包含数字的。

我们可以把正则表达式优化成:[-+]?[0-9]*\.?[0-9]+

最后,如果你是想验证一个字符串是否为浮点数,而不是在一个长字符串中查找浮点数,你必须在正则表达式中使用锚点:^[-+]?[0-9]*\.?[0-9]+$

随机文章:

这篇文章发布于 2011年04月29日,星期五,22:47,归类于 程序设计。您可以跟踪这篇文章的评论通过 RSS 2.0 feed。

您可以留下评论,或者从您的站点trackback。

python 正则表达式匹配数字或者小数点_用正则表达式匹配浮点数相关推荐

  1. js正则表达式校验数字和小数点的数字

    js正则表达式校验数字和小数点的数字 /** obj 校验的数据 name 前台字段的名字,用于判断后清空,可以不传 */ function checkFloat(obj,name){var re = ...

  2. 正则表达式 数字和小数点_《自然语言处理综论》第三版笔记(二)之正则表达式,文本标准化和编辑距离...

    概要 早期有一种叫ELIZA的自然语言处理系统能够与用户进行有限的对话交流.它的原理是通过模式匹配来识别词组,譬如"YOU are X",然后将其转换为合适的回答,如"W ...

  3. 教你用正则表达式提取数字和小数点

    1.初识 1.1.纯数字提取 1 2 3 4 5 6 7 8 9 -- "提取123abc提取":提取当前字符当中的123   -- 1.Hive: select regexp_r ...

  4. 正则表达式符号特殊详解_常用正则表达式_Java中正则表达式的使用

    正则表达式符号详解 限定符: 指定一个组件必须出现多少次才能满足. 1.使用 "*", "+", "?" 作为限定符: "*&qu ...

  5. c语言正则表达式测试数字,C语言中使用正则表达式

    POSIX 规定了正则表达式的C语言库函数, 参见regex(3), 我们已经学了很多C函数得用法  读者应该具备自己看懂man手册得能力 C语言中使用正则表达式一般分为三部: 1.编译正则表达式re ...

  6. python正则表达式匹配数字和字母_只能输入数字和字母组合的正则表达式怎么写?...

    展开全部 var p = /(?!^\d+$)(?!^[a-zA-Z]+$)[0-9a-zA-Z]{4,23}/ (?!^\d+$) 排除全数字 (?!^[a-zA-Z]+$) 排除全字母e5a48d ...

  7. java正则表达式匹配数字和小数点,快来收藏!

    1.为什么要使用分布式锁 使用分布式锁的目的,无外乎就是保证同一时间只有一个客户端可以对共享资源进行操作. 1.1举一个很长的例子 系统 A 是一个电商系统,目前是一台机器部署,系统中有一个用户下订单 ...

  8. java正则表达式 字母数字下划线_字母数字下划线常用正则表达式

    1.由数字.26个英文字母或者下划线组成的字符串: ^[0-9a-zA-Z_]{1,}$ 2.非负整数(正整数 + 0 ): ^/d+$ 3. 正整数: ^[0-9]*[1-9][0-9]*$ 4.非 ...

  9. python正则表达式爬取网页数据_常用正则表达式爬取网页信息及HTML分析总结

    Python爬取网页信息时,经常使用的正则表达式及方法. 1.获取 标签之间内容2.获取 超链接之间内容3.获取URL最后一个参数命名图片或传递参数4.爬取网页中所有URL链接5.爬取网页标题titl ...

最新文章

  1. mysql 必须安装php_非root模式下安装mysql php小记
  2. 权限管理----角色管理
  3. 【Linux】关于ffmpeg的一些常见用法
  4. python快速入门答案-Python 开发 14 天快速入门
  5. UA OPTI512R 傅立叶光学导论7 线性平移不变系统简介
  6. JAVA所有选手就位后比赛开始_Java多线程-CountDownLatch、CyclicBarrier、Semaphore
  7. Winform中实现新增和更新共用一个页面的示例流程
  8. 安卓手机运行git和python操作指南-有手机就能写代码了
  9. 用辩证、动态的眼光看世界
  10. xubntu18.10中的conky配置文件
  11. Unicode、UTF-8、UTF-16之间的关系
  12. 2015年邮件营销机会在哪里?
  13. 【菜鸟站长成长记】CuteFTP9 初步使用心得
  14. 新手电脑硬件软件故障解答(二)
  15. 输入输出练习 python
  16. 利用Dreamweaver模板批量制作网页
  17. 网银支付接口资料小总
  18. 错误1406.无法将数值写入键/Software/Classess/.htm/OpenWithList/devenv.exer的解决方案
  19. Android Fastboot 模式下刷机教程
  20. Eclipse使用入门指南及技巧

热门文章

  1. 算命程序源码 实现一对多的网络算命发展趋势 python编写的,测算的精准度 页面的布局 欢迎业内人士指导改进
  2. Linux云主机安全入侵排查步骤
  3. 启明智显分享|关于SSD202D方案SDK如何编译
  4. Linux CentOS7防火墙端口设置
  5. 收集一下js中常用的英单词
  6. web前端基础单词汇总
  7. 使用tcping命令ping指定端口
  8. python+selenium实现自动化百度搜索关键词
  9. python数据分析项目有趣 新零售-无人智能售货机商务数据分析
  10. oracle查询今天早上8点到明天早上7点59分59秒的数据,可间隔多天,精确到秒