用于逗号分隔列表的正则表达式

eve*_*ent 64 regex csv

验证逗号分隔列表的正则表达式是什么,如下所示:

12365, 45236, 458, 1, 99996332, ......
Run Code Online (Sandbox Code Playgroud)

Asa*_*aph 103

我建议你用以下方式做:

(\d+)(,\s*\d+)*
Run Code Online (Sandbox Code Playgroud)

这适用于包含一个或多个元素的列表.

  • 上述解决方案不会验证空列表.`(^ $)|(^(\ d +)(,\ s*\d +)*$)`可能会工作. (4认同)
  • 如何匹配/提取每个元素(使用正则表达式)? (4认同)

小智 12

此正则表达式从逗号分隔列表中提取元素,而不管内容如何:

(.+?)(?:,|$)
Run Code Online (Sandbox Code Playgroud)

如果你只是用其他东西替换逗号,它应该适用于任何分隔符.

  • 为了处理逗号后面的空格,就像在OP中一样,我建议稍微修改一下:`(.+?)(?:,\s*|$)` (2认同)
  • @paranza - 是的,这将提取多个元素,但前提是启用了全局匹配,您使用的任何函数都会返回所有匹配项,而不仅仅是第一个匹配项。在过去,您可以通过在结束斜杠后添加“g”(例如“/expr/g”)来完成此操作,但显然这并不是那么标准。例如,在 PHP 中,您必须使用“preg_match_all()”而不是“preg_match()”。其他风格的正则表达式有其他实现方式。 (2认同)

mch*_*erm 9

这取决于您的具体要求.我假设:所有数字,任何长度,数字都不能有前导零,也不能包含逗号或小数点.个别数字总是用逗号分隔,然后用空格分隔,最后一个数字后面没有逗号和空格.任何这些错误都会简化解决方案.

([1-9][0-9]*,[ ])*[1-9][0-9]*

以下是我在精神上建立的方式:

[0-9]  any digit.
[1-9][0-9]*  leading non-zero digit followed by any number of digits
[1-9][0-9]*, as above, followed by a comma
[1-9][0-9]*[ ]  as above, followed by a space
([1-9][0-9]*[ ])*  as above, repeated 0 or more times
([1-9][0-9]*[ ])*[1-9][0-9]*  as above, with a final number that doesn't have a comma.
Run Code Online (Sandbox Code Playgroud)


mad*_*lor 7

匹配重复的逗号分隔项:

(?<=,|^)([^,]*)(,\1)+(?=,|$)
Run Code Online (Sandbox Code Playgroud)

参考.

此正则表达式可用于拆分逗号分隔列表的值.列表元素可以是引用的,不引用的或空的.一对引号内的逗号不匹配.

,(?!(?<=(?:^|,)\s*"(?:[^"]|""|\\")*,)(?:[^"]|""|\\")*"\s*(?:,|$))
Run Code Online (Sandbox Code Playgroud)

参考.


Wil*_*ins 5

如果这对您很重要,这个将拒绝行首或行尾的无关逗号。

((, )?(^)?(possible|value|patterns))*
Run Code Online (Sandbox Code Playgroud)

替换possible|value|patterns为与您允许的值匹配的正则表达式。