对于我的想法,是否有更清晰的正则表达式?

Ter*_*ado 3 python regex python-3.x

我只需要接受输入作为数值0 to 100,integers并且floats包含最大 two小数位,并编写正则表达式来检查这些条件.

例如,我希望它接受以下值:

0(min), 0.1, 1, 11, 11.1, 11.11, 100(max).
Run Code Online (Sandbox Code Playgroud)

但不是:

-1, 100.1, 111, 1+1, .1, etc.
Run Code Online (Sandbox Code Playgroud)

到目前为止,我提出了^\d?\d+(\.\d\d?)?$它,但它有一堆问题.

刚才在提交本,我看到这个链接中类似的问题侧边栏有什么似乎是解决("^((?:|0|[1-9]\d?|100)(?:\.\d{1,2})?)$"),但它也接受100.01100.99.除此之外,这是一个非常小的问题,它应该工作.

但是有人知道如何修补那个特定的位吗?

CAu*_*tin 5

100 这是唯一真正的例外,所以它应该相当简单:

^(?:100|\d{1,2}(?:\.\d{1,2})?)$

https://regex101.com/r/Rr0gs4/1

编辑:也允许100.0100.00:

^(?:100(?:\.00?)?|\d{1,2}(?:\.\d{1,2})?)$

  • 可能不希望匹配"01".你可以通过将`\ d {1,2}`改为`[1-9]?\ d`来解决这个问题 (2认同)

Chr*_*ler 5

根据您获得输入的方式,简单地检查数值可能更容易,更快捷.

def acceptable(str_val):
    try:
        return 0 <= float(str_val) <= 100
    except ValueError:
        return False

acceptable('1.11')
# True

acceptable('abc')
# False

acceptable('100.0')
# True

acceptable('100.1')
# False
Run Code Online (Sandbox Code Playgroud)