正则表达式匹配数字列表

3

我正在尝试编写一个正则表达式来匹配由逗号和可选空格分隔的非常长的数字列表。它不能匹配单个整数。数字列表大约有7000字节长,两侧有文本边界。

12345 => don't match
12345,23456,34567,45678 => match
12345, 23456, 34567, 45678 => match

我目前的正则表达式:

(?<!\.)(([0-9]+,)+[0-9]+)(?!\.)

导致堆栈溢出的原因有很多,目前我尝试过的一些方法包括:

([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

我将使用https://regex101.com/来测试每个正则表达式所需的步骤数,原始步骤数约为3000步。
例如(省略)字符串:
Processing 145363,145386,145395,145422,145463,145486 from batch 59

任何帮助都将不胜感激。

4个回答

6
您可以使用以下正则表达式进行匹配:
^\d+(?:[ \t]*,[ \t]*\d+)+$

正则表达式演示

  • \d+ 匹配一个或多个数字
  • (?:...)+ 匹配以下数字之一,数字可以用逗号隔开,也可以包含空格或制表符。

3
(\d+,\s*)+\d+
\d+,\s* 匹配所有逗号后面有空格/无空格的数字。然而,我们需要特别注意上述组中没有逗号的最后一个数字。 因此,使用\d+ 结尾以匹配最后一个数字。

2
如何?
(?:\d+,\s*)+\d+

内容分解:

(?:         # 开始分组
  \d+       #   数字
  ,\s*      #   “,”,可选空格
)+          # 结束分组,重复
\d+         # 数字(列表中的最后一项)

请注意,\s 包括除空格和制表符以外的空白字符,尤其是换行符 (\n)。如果您的输入要求,可以使用 [ \t] 替代 \s 来防止误报。


1

你可以使用这个正则表达式来获取匹配的项:

(?<=,|^)\s*(\d+)\s*(?=,|$)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接