正则表达式以避免分隔字符串中的数据重复?

Regex to avoid data duplication in delimited string?

我正在尝试验证 string 值与 , 分隔的数据。我想要的是验证 sting.

中不应重复相同的值

例如。我的价值是。

    data1 = "value1,value2,value3,va-lu4,value 6,value1";//should fail
    data2 = "value1,value2,value3,va-lu4,value 6";//should pass

在上面的场景中,data1 应该会失败,因为它包含两次 value1。在 data2 中应该通过或匹配,因为它不包含任何重复值。

这是我匹配每个值的结果,但不确定如何检查重复项。

    ^[-\w\s]+(?:,[-\w\s]*)*$

这将匹配定界符之间的值,但不确定如何检查是否存在重复值。任何帮助都会很棒。
注意- 我知道我可以使用 sting 函数和循环来做到这一点,但我正在学习 Regex 并想尝试使用 regex.In 案例如有困惑,请随时发表评论,因为这是我在 Stack 上的第一个问题。

^(?!(?:^|.*,)([^,\n]*),.*(?:,|$)).*$

尝试 this.See 演示。

https://regex101.com/r/wU7sQ0/24

正则表达式在很多情况下都很有用。但是要检查字符串中的重复项可以像这样更容易(在C#中):

bool HasDuplicates(string str)
{
    var list1=str.Split(',').Select(s=>s.Trim());
    var list2=list1.Distinct();
    return (list1.Count()>list2.Count());
}

工作原理: 该函数将字符串转换为列表,修剪元素,然后从中创建第二个不同的列表。最后,它比较两个列表中的元素数量:如果不同列表的元素少于原始列表,则您有重复项,函数 returns 为真,否则为假。

示例:

var result1=HasDuplicates("Test1, Test1, Test2");
var result2=HasDuplicates("Test1, Test2, Test3");

变量result1包含true,变量result2包含false。 您可以尝试 DotNetFiddle 中的代码:https://dotnetfiddle.net/0pRURH

这个有效:

^(?!.*(^|,)([^,]+),.*(,|$)).*

demo