正则表达式为1或2或3十进制数,不允许前导零,精度2和分数

时间:2015-03-19 10:18:49

标签: python regex

我正在尝试创建一个满足以下条件的正则表达式:

  1. 一个或两个或三个十进制数。

  2. 十进制数内没有前导零。

  3. 精确度2.

  4. 允许适当的分数(0 .__数字)。

  5. 十进制数字前没有文字

  6. 正则表达式应符合以下条件:

    • 123.45
    • 103.67
    • 100.45
    • 25.68
    • 5.97
    • 1.05
    • 23.07
    • 187.08
    • 0.26

    正则表达式不应与以下内容匹配:

    • 0.45
    • 1234.45
    • 023.45
    • 03.67
    • 845.7

    我想出了以下正则表达式:

    (?<!.)^([1-9][0-9]{0,2}\.[0-9][0-9])$
    

    它满足以上分数之外的所有内容。

    如果十进制数字有2或3位数,我不想要前导零。但是,如果它是合适的分数,我确实希望允许0 .__。

    但是,我的正则表达式与“0 .__”十进制数字不匹配,因为它希望数字从“^[1-9]”开始为1。

    请告知我如何修改我的正则表达式以匹配“0 .__”数字。

4 个答案:

答案 0 :(得分:4)

试试这个正则表达式。

\b(?!0\d{1,2}\.)\d{1,3}\.\d{2}\b

请参阅Demo

答案 1 :(得分:1)

这个怎么样:

\b(0|[1-9]\d{0,2})\.\d{2}\b

Here你可以看到它与你想要的完全匹配。

答案 2 :(得分:0)

您可以使用此正则表达式:

^(?!0+[1-9])\d{1,3}\.\d{2}$

RegEx Demo

(?!0+[1-9])是一个负向前瞻,会阻止数字中的前导零。

答案 3 :(得分:0)

假设您正在使用re.match,这是您可以使用的最短时间:

(?!0)\d{1,3}\.\d{2}

如果您使用搜索:

^(?!0)\d{1,3}\.\d{2}$

您不需要以不同方式处理第一个数字,因此您可以使用\ d(与[0-9]相同)并确保第一个字符不为0且具有负前瞻(?!0 )。