Regex检查编号在列表中是唯一的
本文关键字:唯一 列表 检查 编号 Regex | 更新日期: 2023-09-27 18:25:20
我正试图找到一种方法来检查输入字符串是否是唯一的数字。例如:
1,2,45,4,5 => true
11,13,14,15 => true
12,123,12,15 => false
3,5,67,3,5,3 => false
我不得不学习并编写代码('d+)(,|'d| )*('1)
进行测试,但它在相同的一位数中失败,失败案例为:
23,13,14
1,11,15
假设您对非正则表达式解决方案持开放态度,检测重复项的一种方法是在逗号上拆分,按数字分组,并查看是否有任何数字重复。
var input = "12,123,12,15";
var isUnique = input.Split(',')
.GroupBy(x => x)
.All(x => x.Count() == 1); // returns false in this case
类似的东西?(无正则表达式)
public static bool func(string s){
try {
return s.Split(',')
.Select(x=>Int32.Parse(x))
.GroupBy(x=>x)
.All(x=>x.Count() == 1)
}catch (FormatException e){
//oh noes the string was not formatted nicely :(
return false; // do something appropriate for your application
}
}
我认为你应该检查数字的末尾(comas)
Regex r = new Regex(@"(^|,)('d+),(.*,)?'2($|,)");
编辑
我制作了一个更神秘的正则表达式版本。它处理前导零和空格。
Regex r = new Regex(@"(^|[,'s])0*('d+)[,'s](.*[,'s])?0*'2($|[,'s])");
string[] samples = new string[]{
"1,2,45,4,5",
"11,13,14,15",
"12,123,12,15",
"3,5,67,3,5,3",
"23,13,14",
"1,11,15",
"3,003",
"1,3,4,3"
};
foreach (string sample in samples)
{
Console.WriteLine(sample + " => " + (r.IsMatch(sample) ? "duplicit" : "unique"));
}
输出
1,2,45,4,5 => unique
11,13,14,15 => unique
12,123,12,15 => duplicit
3,5,67,3,5,3 => duplicit
23,13,14 => unique
1,11,15 => unique
3,003 => duplicit
1,3,4,3 => duplicit