验证像这样的逗号分隔列表的正则表达式是什么:
12365, 45236, 458, 1, 99996332, ......
验证像这样的逗号分隔列表的正则表达式是什么:
12365, 45236, 458, 1, 99996332, ......
Answers:
我建议您通过以下方式进行操作:
(\d+)(,\s*\d+)*
这将适用于包含1个或多个元素的列表。
(^$)|(^(\d+)(,\s*\d+)*$)
也许可以。
此正则表达式从逗号分隔的列表中提取元素,而与内容无关:
(.+?)(?:,|$)
如果仅用其他内容替换逗号,则它应适用于任何定界符。
(.+?)(?:,\s*|$)
/expr/g
)来实现此目的,但是显然这还不是全部标准。例如,在PHP中,您必须使用preg_match_all()
而不是preg_match()
。正则表达式的其他形式也有其他方式。
这取决于您的确切要求。我假设:所有数字,任何长度,数字都不能有前导零,也不能包含逗号或小数点。单个数字始终以逗号分隔,后跟一个空格,最后一个数字后面没有逗号和空格。这些错误中的任何一个都会简化解决方案。
([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.
([1-9][0-9]*[ ]*,[ ]*)*[1-9][0-9]*
...也许有人会觉得这个有用
我有一个稍微不同的要求,就是要使用转义的逗号来解析编码的字典/哈希表,如下所示:
"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!
12365,45236,"This is a \"test."