【发布时间】:2010-05-27 13:21:45
【问题描述】:
我正在尝试创建一个接受的正则表达式: 空字符串、单个整数或多个整数,以逗号分隔,但不能有开始和结束逗号。
我设法找到了这个,但我不知道如何删除数字限制
^\d{1,10}([,]\d{10})*$
【问题讨论】:
-
请注意
[,]等同于,并且您可能打算写([,]\d{1,10})*而不是([,]\d{10})*。
我正在尝试创建一个接受的正则表达式: 空字符串、单个整数或多个整数,以逗号分隔,但不能有开始和结束逗号。
我设法找到了这个,但我不知道如何删除数字限制
^\d{1,10}([,]\d{10})*$
【问题讨论】:
[,] 等同于 , 并且您可能打算写 ([,]\d{1,10})* 而不是 ([,]\d{10})*。
您发布的内容仍然需要至少 1 个整数,因此它不会匹配空字符串:
这是你需要的:
^(\d+(,\d+)*)?$
说明:
'?'结尾,以便匹配空字符串。'\d+'. 即 1 个或多个数字字符 ('0'-'9')
',\d+' 的括号,并在其后面加上一个星号。整个事情都是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,10} 和 {10} 是范围。您可以用+ 替换它们以获得无限正。例如:
^\d+([,]\d+)*$
【讨论】:
尝试以下方法:
^(\d+(,\d+)*)?$
【讨论】:
其他一些答案是逗号之间的 4 位数字。这是一个带有可选符号并在逗号之间强制使用 3 位数字的细微变化:
^[+-]?(\d+(,\d{3})*)$
【讨论】:
我会通过将内部组设为非捕获组来扩展 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')
【讨论】: