【问题标题】:Find a decimal with a precision of 2 using yes pattern|no pattern使用 yes 模式|no 模式查找精度为 2 的小数
【发布时间】:2020-09-20 16:37:14
【问题描述】:

有人可以指出我犯的错误,为什么这里 123 不匹配?

def is_decimal(num):
    import re
    pattern = re.compile(r"(\b\d+\.)(?(1)\d{1,2}\b|\d+)")
    result = pattern.search(num)
    return bool(result)


print(is_decimal('123.11'))
print(is_decimal('123'))
print(is_decimal('0.21'))

print(is_decimal('123.1214'))
print(is_decimal('e666.86'))

预期输出:True, True, True, False, False

实际输出:True, False, True, False, False

【问题讨论】:

  • 你忘记了.。可选
  • 甚至不清楚您希望匹配哪种类型的小数以及不匹配哪种类型。您还应该提及您希望所需数字遵循的模式。
  • 正如@mousetail 所说,(\b\d+\.) 匹配123. 而不是123,. 包含在捕获组中

标签: python python-re decimal-precision


【解决方案1】:

试试pattern = re.compile(r"(\b\d+\.*)(?(1)\d{1,2}\b|\d+)")

【讨论】:

    【解决方案2】:

    您可以尝试以下模式:

    ^(\d+)(\.\d{1,2})?$
    

    其中一个关键是不要使用\b,因为点(.)也被认为是导致错误解析的单词边界。相反,您可以使用^ 匹配字符串的开头,使用$ 匹配字符串的结尾。

    上述模式可以在以下网站进行交互测试:

    https://regex101.com/r/CixCHT/4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2010-09-23
      • 2011-09-27
      • 1970-01-01
      • 2020-12-21
      • 2017-07-12
      相关资源
      最近更新 更多