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

时间:2009-09-08 20:12:06

标签: regex csv

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

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

11 个答案:

答案 0 :(得分:97)

我建议您按以下方式进行:

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

适用于包含1个或多个元素的列表。

答案 1 :(得分:10)

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

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

如果您只是用其他内容替换逗号,它应适用于任何分隔符。

答案 2 :(得分:7)

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

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

Reference

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

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

Reference

答案 3 :(得分:7)

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

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

答案 4 :(得分:5)

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

答案 5 :(得分:2)

我用这个项目列表必须是字母数字,而不是每个项目前面都有下划线。

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

答案 6 :(得分:2)

如果这对您很重要,那么这一行将在行的开头或结尾拒绝无关的逗号。

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

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

答案 7 :(得分:1)

您可能希望指定语言只是为了安全,但

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

应该工作

答案 8 :(得分:1)

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

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

我认为这是一个优雅的解决方案,有一个技巧可以避免很多正则表达式的复杂性:

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?"之类的表达式对原始问题进行调整,并在Groups[0]上进行解析。

我希望它对某些人有帮助,并感谢有关它的建议,尤其是Asaph!

答案 9 :(得分:1)

在JavaScript中,使用#include <iostream> #include <vector> struct group { int n1; int n2; int n3; }; int main() { std::vector<group> groups; while (std::cin) { group line; line.n1 << std::cin; line.n2 << std::cin; line.n3 << std::cin; groups.push_back(group); } } 来帮助,并捕获任何负数:

split

答案 10 :(得分:1)

以下内容将与任何以逗号分隔的单词/数字/空格组合匹配

DNAME