【问题标题】:Return True/False for a matched or an unmatched floating point number using Regex in Python在 Python 中使用正则表达式为匹配或不匹配的浮点数返回 True/False
【发布时间】:2020-07-02 08:59:17
【问题描述】:

我需要为用户定义的输入中所有匹配的浮点数打印 (True),如果输入不是浮点数,我需要打印 (False)。

到目前为止,我想出了这个:

import re

user_input = input() # the input will be (+4.9, 4.0, 2.89, 4, somerandomstuff)

pattern = re.compile(r'[+-]?[0-9]+\.[0-9]+') #pattern to match floating point numbers

matches = pattern.finditer(user_input)

for match in matches:
    print(bool(match))

预期结果:

输入 = (+4.9, 4.0, 2.89, 4, somerandomstuff, stackoverflow)

是的 真的 真的 错误的 错误的 假的

感谢您的帮助!

【问题讨论】:

  • 如果 user_input 是一个包含所有值的字符串,模式只会找到匹配的结果。我认为如果要打印 False,则必须尝试单独匹配每个值。
  • 您是否要匹配包含小数点的数字?它们是否可以包含指数,例如4.9e3?一个典型的模式是字符串(a)有一个可选的符号(“+”或“-”),有一个句点,前面有数字,后面有数字,或者两者都有(但不是两者都没有),并且可选结束带有“e”或“E”后跟可选符号,后跟数字或 (b) 具有可选符号、数字和指数部分。即,字符串包含小数点或指数或两者。鉴于此,您知道如何为此编写正则表达式吗?对于它的一部分?
  • @EricPostpischil 不,我不是要匹配指数。顺便说一句,谢谢。
  • @Thefourthbird 是的,我尝试了个人匹配但失败了。
  • 该模式拒绝它们,因为我编写的正则表达式不希望这被视为漂浮。 @Thefourthbird 正是我需要的,谢谢伙计。

标签: regex python-3.x floating-point boolean pattern-matching


【解决方案1】:

假设用户输入将始终具有您提供的格式,您可以使用float 并尝试将每个值转换为浮点数。此外,要过滤掉整数,您可以检查每个字符串中是否存在.

import re

user_input = input()

for match in user_input.strip("()").split(","):
    try:
        num = float(match)
        print("." in match)
    except ValueError:
        print(False)

打印:

True
True
True
False
False
False

【讨论】:

  • 是的,我明白了你的意思,但我的主要动机是使用正则表达式解决问题。
猜你喜欢
  • 2015-03-17
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2011-10-26
  • 2019-09-21
  • 2021-10-12
  • 2016-07-26
  • 1970-01-01
相关资源
最近更新 更多