正则表达式匹配数字列表

时间:2017-01-18 17:11:25

标签: regex

我试图写一个正则表达式来匹配用逗号和可选空格分隔的很长的数字列表。它不能匹配单个整数。数字列表长约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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

怎么样

    examplePopUpController = exampleViewController.popoverPresentationController!
    examplePopUpController?.backgroundColor = UIColor.clear

故障:

(?:         # begin group
  \d+       #   digits
  ,\s*      #   ",", optional whitespace
)+          # end group, repeat
\d+         # digits (last item in the list)

请注意(?:\d+,\s*)+\d+ 除空格和制表符外还包含空格字符,最明显的是换行符(\s)。如果您的输入需要,请使用\n代替[ \t]以防止误报。

答案 1 :(得分:2)

您可以使用此正则表达式:

^\d+(?:[ \t]*,[ \t]*\d+)+$

RegEx Demo

  • \d+匹配1位或更多位数
  • (?:...)+匹配以逗号分隔的以下数字中的一个或多个,可选择用空格/制表符包围。

答案 2 :(得分:1)

(\d+,\s*)+\d+

\d+,\s*将所有数字与逗号后跟空格/ nospace匹配。但是,我们需要注意上一组中没有“,”的最后一个数字。最后用\d+结束最后一个数字。