【问题标题】:Regex: Comma delimited integers正则表达式:逗号分隔的整数
【发布时间】:2010-05-27 13:21:45
【问题描述】:

我正在尝试创建一个接受的正则表达式: 空字符串、单个整数或多个整数,以逗号分隔,但不能有开始和结束逗号。

我设法找到了这个,但我不知道如何删除数字限制

^\d{1,10}([,]\d{10})*$

【问题讨论】:

  • 请注意 [,] 等同于 , 并且您可能打算写 ([,]\d{1,10})* 而不是 ([,]\d{10})*。

标签: regex csv


【解决方案1】:

您发布的内容仍然需要至少 1 个整数,因此它不会匹配空字符串:

这是你需要的:

^(\d+(,\d+)*)?$

说明:

  1. 将整个内容放在括号中,并以'?'结尾,以便匹配空字符串。
  2. 总是以整数开头,所以 '\d+'. 即 1 个或多个数字字符 ('0'-'9')
  3. 然后制作一组包含 ',\d+' 的括号,并在其后面加上一个星号。
    3a。内部表示以“,”开头,然后是整数。 3b。星号表示将括号内的所有内容重复 0 次或多次。

整个事情都是either an empty string or start with an integer then repeat zero or more times a string which starts with a comma and ends with an integer

【讨论】:

    【解决方案2】:

    {1,10} 和 {10} 是范围。您可以用+ 替换它们以获得无限正。例如:

    ^\d+([,]\d+)*$
    

    【讨论】:

    • 我认为您也可以省略逗号周围的方括号。
    【解决方案3】:

    尝试以下方法:

    ^(\d+(,\d+)*)?$
    

    【讨论】:

      【解决方案4】:

      其他一些答案是逗号之间的 4 位数字。这是一个带有可选符号并在逗号之间强制使用 3 位数字的细微变化:

      ^[+-]?(\d+(,\d{3})*)$
      

      【讨论】:

        【解决方案5】:

        我会通过将内部组设为非捕获组来扩展 tster 的答案。

        ^(\d+(?:,\d+)*)?$
        

        举个例子

        re.search('^(\d+(?:,\d+)*)?$', "1,2,3,4").groups() 
        ('1,2,3,4',)
        

        返回一个包含 1 个元素的元组。但如果内部组是捕获组,则最后会得到一个额外的元素。

        re.search('^(\d+(,\d+)*)?$', "1,2,3,4").groups()
        ('1,2,3,4', ',4')
        

        【讨论】:

          猜你喜欢
          • 2018-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多