正则expression式为逗号分隔的列表

什么是正则expression式来validation逗号分隔列表像这样:

12365, 45236, 458, 1, 99996332, ...... 

我build议你按照以下的方式做:

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

这将用于包含一个或多个元素的列表。

匹配重复的逗号分隔的项目:

 (?<=,|^)([^,]*)(,\1)+(?=,|$) 

参考

这个正则expression式可以用来分割逗号分隔列表的值。 列表元素可能被引用,不加引号或空白。 一对引号内的逗号不匹配。

 ,(?!(?<=(?:^|,)\s*"(?:[^"]|""|\\")*,)(?:[^"]|""|\\")*"\s*(?:,|$)) 

参考

 /^\d+(?:, ?\d+)*$/ 

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

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

以下是我如何精神上build立的:

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

这个正则expression式从逗号分隔列表中提取一个元素,而不pipe内容如何:

 (.+?)(?:,|$) 

如果你只是用别的东西replace逗号,它应该适用于任何分隔符。

我用这个列表的项目必须是在每个项目的前面没有下划线的字母数字。

 ^(([0-9a-zA-Z][0-9a-zA-Z_]*)([,][0-9a-zA-Z][0-9a-zA-Z_]*)*)$ 

您可能需要指定语言才是安全的,但是

 (\d+, ?)+(\d+)? 

应该工作

我有一个稍微不同的要求,parsing一个编码的字典/散列表与转义的逗号,如下所示:

 "1=This is something, 2=This is something,,with an escaped comma, 3=This is something else" 

我认为这是一个优雅的解决scheme,避免了很多正则expression式的复杂性:

 if (string.IsNullOrEmpty(encodedValues)) { return null; } else { var retVal = new Dictionary<int, string>(); var reFields = new Regex(@"([0-9]+)\=(([A-Za-z0-9\s]|(,,))+),"); foreach (Match match in reFields.Matches(encodedValues + ",")) { var id = match.Groups[1].Value; var value = match.Groups[2].Value; retVal[int.Parse(id)] = value.Replace(",,", ","); } return retVal; } 

我认为它可以用一个像“ @"([0-9]+),\s?"这样的expression式来适应原来的问题@"([0-9]+),\s?" 并在Groups[0]上parsing。

我希望这对某些人很有帮助,并且感谢他们接近那里的提示,尤其是Asaph!

如果这对你很重要的话,这个人会在开始或结束时拒绝外部的逗号。

 ((, )?(^)?(possible|value|patterns))* 

possible|value|patternsreplace为与允许的值匹配的正则expression式。

在JavaScript中,使用split来帮助,并捕获任何负数:

 '-1,2,-3'.match(/(-?\d+)(,\s*-?\d+)*/)[0].split(','); // ["-1", "2", "-3"] // may need trimming if digits are space-separated