Regex 正则表达式匹配数字列表
我试图编写一个正则表达式来匹配由逗号和可选空格分隔的很长的数字列表。它不能匹配单个整数。数字列表的长度约为7000字节,由两侧的文本限定Regex 正则表达式匹配数字列表,regex,Regex,我试图编写一个正则表达式来匹配由逗号和可选空格分隔的很长的数字列表。它不能匹配单个整数。数字列表的长度约为7000字节,由两侧的文本限定 12345 => don't match 12345,23456,34567,45678 => match 12345, 23456, 34567, 45678 => match 我当前的正则表达式,(?)会导致堆栈溢出。到目前为止,我尝试过的几个正则表达式包括: ([0-9,]+) => doesn't match with opt
12345 => don't match
12345,23456,34567,45678 => match
12345, 23456, 34567, 45678 => match
我当前的正则表达式,(?)会导致堆栈溢出。到目前为止,我尝试过的几个正则表达式包括:
([0-9,]+) => doesn't match with optional spaces
((\d+,[ ]?)+\d+) => worse than the original
[ ]([0-9, ]+)[ ] => can't be certain the numbers will be bounded by spaces
我用它来测试每个正则表达式执行的步骤数,原来大约是3000个步骤
示例(省略)字符串:
任何帮助都将不胜感激。怎么样
(?:\d+,\s*)+\d+
细分:
(?: # begin group
\d+ # digits
,\s* # ",", optional whitespace
)+ # end group, repeat
\d+ # digits (last item in the list)
(?:#开始分组
\d+#位
,\s*#“,”,可选空白
)+#终端组,重复
\d+#位(列表中的最后一项)
请注意,\s
除了空格和制表符之外还包括空格字符,最明显的是换行符(\n
)。如果您的输入需要,请使用[\t]
代替\s
,以防止误报。您可以使用此正则表达式:
^\d+(?:[ \t]*,[ \t]*\d+)+$
\d+
匹配一个或多个数字
(?:…)+
匹配以下1个或多个数字,这些数字由逗号分隔,可以选择用空格/制表符包围
\d+,\s*
用逗号和空格/nospace匹配所有数字。但是,我们需要查找没有“,”的最后一个数字,如上述组中所示。因此,请在\d+
400K之前以最后一个数字结尾!祝贺您。非常感谢@fedorqui的友好和及时的祝愿
^\d+(?:[ \t]*,[ \t]*\d+)+$
(\d+,\s*)+\d+