Python正则匹配数字,python正则表达式匹配整数
在这个例子中,我将向您展示如何避免不熟悉正则表达式的人经常犯的一些错误。我们将尝试构建一个可以匹配浮点数的正则表达式。我们的正则表达式也应该匹配整数,以及整数部分(即0)未给定的浮点数。
乍一看,下面这个正则表达式似乎达到了预期的效果[-]?[0-9]*\.[0-9]*。这定义了一个浮点数:一个可选的符号(sign),后跟一个可选的数字序列(整数部分),一个可选的点(小数点),以及一个可选的数字序列(小数部分)。
用单词拼出这个正则表达式,使其更加明显:正则表达式的所有部分都是可选的。这个正则表达式将一个符号(加号或减号)或一个点(小数点)作为有效的浮点数。事实上,它会将空字符串视为有效的浮点数。如果在Perl或PHP之类的脚本语言中使用它来验证用户输入,这个正则表达式将会带来严重的麻烦。
不转义点也是一个常见错误。转义点将匹配任何字符,包括点。如果不转义点,4.4会被认为是浮点数,4X4也是。
在创建正则表达式时,更重要的是考虑它不应该匹配什么,而不是应该匹配什么。因为正则表达式引擎比较贪心,上面的正则表达式确实可以匹配到一个正确的浮点数。但是也会匹配很多我们不想要的东西,一定要排除。
这里有一个更好的尝试:[-]?([0-9]*\.[0-9] [0-9] )。这个正则表达式将匹配一个可选符号(sign),或者零个或多个数字后跟一个点(小数点),后跟一个或多个数字(整数部分可选浮点数),或者一个或多个数字(整数)。
这是一个更好的定义。由于[0-9]部分的关系,所有匹配都包含至少一个数字。我们成功地排除了不想要的匹配:那些不包含数字的匹配。
我们可以将正则表达式优化为:[-]?[0-9]*\.[0-9]
最后,如果要验证一个字符串是否是浮点数,而不是在一个长字符串中寻找浮点数,那么必须在正则表达式中使用锚点:[-]?[0-9]*\.[0-9] $
随机文章:
这篇文章发表于2011年4月29日,星期五,22:47,分类为编程。你可以通过RSS 2.0 feed关注这篇文章的评论。
您可以在您的网站上发表评论或引用通告。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。