正则表达式:逗号分隔整数

时间:2010-05-27 13:21:46

标签: regex csv

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

我设法找到了这个,但我不能取消和如何删除数字限制

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

5 个答案:

答案 0 :(得分:35)

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

以下是您的需求:

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

阐释:

  1. 将整个内容放在括号中,并以 '?' 结束,以匹配空字符串。
  2. 始终以整数开头,因此 '\d+'. 这是一个或多个数字字符 ('0'-'9')
  3. 然后制作一组包含 ',\d+' 的括号,并在其后面加上星号。
    3A。内部意味着以','然后是整数开头。 3B。星号表示重复括号内的所有内容0次或更多次。
  4. Hench整个事情是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

答案 1 :(得分:3)

{1,10}{10}是范围。您可以将+替换为无限正数。例如:

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

答案 2 :(得分:1)

尝试以下方法:

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我会通过将内部组设为非捕获组来扩展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')