【问题标题】:Regex for 1 or 2 or 3 decimal number, no leading zeros, precision 2 and fractions are allowed1 或 2 或 3 个十进制数的正则表达式,不允许前导零、精度 2 和小数
【发布时间】:2015-03-19 10:18:49
【问题描述】:

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

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

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

  3. 精度 2。

  4. 允许正确的分数(0.__ 个数字)。

  5. 小数点前无文字

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

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

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

  • .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.__”数字。

【问题讨论】:

  • “一个两位或三位十进制数”是什么意思?或者更确切地说,它如何与“精度 2”相匹配?
  • @Qwerty (?&lt;!.) 应该达到什么目的?

标签: python regex


【解决方案1】:

试试这个正则表达式。

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

Demo

【讨论】:

    【解决方案2】:

    这个呢:

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

    Here 你可以看到它完全符合你的要求。

    【讨论】:

      【解决方案3】:

      你可以使用这个正则表达式:

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

      RegEx Demo

      (?!0+[1-9]) 是负前瞻,将停止数字中的前导零。

      【讨论】:

        【解决方案4】:

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

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

        如果您使用搜索:

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

        您不需要区别对待第一个数字,因此您可以使用 \d(与 [0-9] 相同)并确保第一个字符不是 0 并带有负前瞻 (?!0 )。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-22
          • 2014-09-08
          • 1970-01-01
          • 2015-06-30
          • 2010-09-23
          相关资源
          最近更新 更多