【问题标题】:Comma Separated Numbers Regex逗号分隔的数字正则表达式
【发布时间】:2013-05-18 05:21:03
【问题描述】:

我正在尝试验证数字 1-8 的逗号分隔列表。

2,4,6,8,1 是有效输入。

我尝试了[0-8,]*,但它似乎接受1234 为有效。它不需要逗号,它允许我输入大于 8 的数字。我不知道为什么。

【问题讨论】:

  • 逗号需要在字符类之外,并使用括号分组到数字字符。即:([0-8],)+
  • 你说你想要数字 1-8,但你的正则表达式试图匹配 0-8。是哪个?
  • 1-8 不超过 8
  • 只是为了回答你的问题,这里有点明确;如果它接受 1234 为有效,它也将接受 abcd,因为有 0 个匹配项,这是您使用 * 所要求的

标签: regex


【解决方案1】:

[0-8,]* 将匹配字符串中任意位置的零个或多个 08, 的连续实例。你想要更多这样的东西:

^[1-8](,[1-8])*$

^ 匹配字符串的开头,$ 匹配结尾,确保您正在检查整个字符串。它将匹配一个数字,加上零个或多个逗号实例,后跟一个数字。

【讨论】:

  • 如果我尝试检查值 1234, 1345, 4455,它将中断
  • 在更一般的情况下,^[0-9]+(,[0-9]+)*$(因为标题 - 逗号分隔的数字正则表达式 - 听起来比 OP 在问题正文中描述的更广泛)。
  • @WiktorStribiżew 在更一般的情况下,您可以使用^\d+(,\d+)*$,因为\d 表示“数字”,或者[0-9] 以10 为底
  • @chharvey \d 不受某些正则表达式引擎(如 POSIX)的支持,因此在只有一个标签 regex 的问题的上下文中,[0-9] 更安全。这就是为什么我没有在回答中使用非捕获组。
【解决方案2】:
/^\d+(,\d+)*$/
  • 至少一位数字,否则您将接受 1,,,,,4

【讨论】:

  • OP 正在尝试验证逗号分隔的 0 到 8(含)数字列表,而不是逗号分隔的任意位数列表。
  • 但它实际上回答了“标题”问题,这就是我在这里的原因
【解决方案3】:
[0-9]+(,[0-9]+)+

一般来说,这对我来说更适合逗号分隔的数字,例如:1,234,933

【讨论】:

    【解决方案4】:

    你可以试试这个正则表达式:

    ^[1-8](,[1-8])+$
    

    【讨论】:

      【解决方案5】:

      如果您正在使用 python 并希望找出所有可能的匹配字符串,例如 XX,XX,XXX 或 X,XX,XXX 或 12,000, 1,20,000 使用正则表达式

      string = "I spent 1,20,000 on new project "
      re.findall(r'(\b[1-8]*(,[0-9]*[0-9])+\b)', string, re.IGNORECASE)
      
      Result will be --->  [('1,20,000', ',000')]
      

      【讨论】:

        【解决方案6】:

        你需要一个可以重复的数字+逗号组合:

         ^[1-8](,[1-8])*$
        

        如果您不想记住括号,请将 ?: 添加到括号中,如下所示:

         ^[1-8](?:,[1-8])*$
        

        【讨论】:

        • 21,22,24,343546 对这个表达式有效。最大数只能是8
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        相关资源
        最近更新 更多