验证逗号分隔列表的正则表达式是什么,如下所示:
12365, 45236, 458, 1, 99996332, ......
答案 0 :(得分:97)
我建议您按以下方式进行:
(\d+)(,\s*\d+)*
适用于包含1个或多个元素的列表。
答案 1 :(得分:10)
此正则表达式从逗号分隔列表中提取元素,无论内容如何:
(.+?)(?:,|$)
如果您只是用其他内容替换逗号,它应适用于任何分隔符。
答案 2 :(得分:7)
匹配以逗号分隔的重复项:
(?<=,|^)([^,]*)(,\1)+(?=,|$)
此正则表达式可用于拆分逗号分隔列表的值。列表元素可以是引用的,不引用的或空的。一对引号内的逗号不匹配。
,(?!(?<=(?:^|,)\s*"(?:[^"]|""|\\")*,)(?:[^"]|""|\\")*"\s*(?:,|$))
答案 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