【问题标题】:what is the regular expression for identifying decimal number [duplicate]识别十进制数的正则表达式是什么[重复]
【发布时间】:2019-07-14 16:00:30
【问题描述】:

我已经尝试使用正则表达式在python中编写一个代码来识别十进制数,如下面的代码所示。

它在许多情况下都可以正常工作,但仍然无法识别以下输入

import re
string = input()
r = re.compile(r"([+\-.]?\d*\.\d+)\b")
if(r.match(string)):
    print(True)
else: 
    print(False)

234.2344 ->对于这个输入给出预期的结果

+.3456468 ->对于这个输入给出预期的结果

5.34.0 -> 对于这个输入,它应该打印 False

4+345.0 -> 对于这个输入,它应该打印 False

【问题讨论】:

  • ^[+-]\d+(\.\d+)$ 试试这个
  • 您应该在开头添加^,在末尾添加$。没有它,只要字符串 包含 一个有效的十进制模式,它就会接受。您想强制它捕获整个字符串
  • 另外,只要float(string)...
  • @Tomerikoo:我试过了,但它没有显示匹配十进制数字。见下方链接regexr.com/4he9t

标签: python regex


【解决方案1】:

这些表达式可能会验证整数和十进制数:

^[+-]?(?:\d+(?:\.\d+)?|\.\d+)$

^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$

如果例如1. 是有效的。

DEMO 1

DEMO 2

测试

import re

regex = r"^[+-]?(?:\d+(?:\.\d+)?|\.\d+)$"

test_str = ("0.00000\n"
    "0.00\n"
    "-100\n"
    "+100\n"
    "-100.1\n"
    "+100.1\n"
    ".000\n"
    ".1\n"
    "3.\n"
    "4.")

print(re.findall(regex, test_str, re.MULTILINE))

输出

['0.00000', '0.00', '-100', '+100', '-100.1', '+100.1', '.000', '.1']

正则表达式电路

jex.im 可视化正则表达式:

如果您想探索/简化/修改它,this demo 的右上方面板上会解释该表达式。

【讨论】:

    【解决方案2】:

    你可以使用

    ^[+-]?(?:\.\d+|\d+(?:\.\d+)?)$
    

    Python demo|Regex Demo

    【讨论】:

      【解决方案3】:

      如果您不希望它与第一个类似小数的部分匹配,请使用开始 ^ 和结束锚点 $

      import re
      decimal_re = re.compile(r'^\D?[+-]?\d*\.?\d+$')
      
      cases = [
          '234.2344',
          '+.3456468',
          '5.34.0',
          '4+345.0',
          '1.5555',
          '.123123',
          '456.',
          '4.4.5.5'
      ]
      for c in cases:
          print(decimal_re.match(c))
      

      输出:

      <re.Match object; span=(0, 8), match='234.2344'>
      <re.Match object; span=(0, 9), match='+.3456468'>
      None
      None
      <re.Match object; span=(0, 6), match='1.5555'>
      <re.Match object; span=(0, 7), match='.123123'>
      None
      None
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多