我正在尝试编写一个正则表达式来匹配一个由逗号和可选空格分隔的非常长的数字列表。它不能匹配单个整数。数字列表大约有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条答案
按热度按时间9ceoxa921#
你可以使用这个正则表达式:
RegEx Demo
\d+
匹配1个或多个数字(?:...)+
匹配下列数字中的一个或多个,这些数字之间用逗号分隔,可以用空格/制表符包围。e7arh2l62#
\d+,\s*
匹配所有带有逗号后跟空格/无空格的数字。然而,我们需要注意最后一个没有“,”的数字,就像上面的组一样。最后一个数字是\d+
。avwztpqn3#
不如
细分:
请注意,
\s
除了空格和制表符外还包括空格字符,最明显的是换行符(\n
)。如果您的输入需要,请使用[ \t]
代替\s
以防止误报。ctehm74n4#
你可以用这个正则表达式得到匹配项: