代码之家  ›  专栏  ›  技术社区  ›  user2745246

Regex以避免分隔字符串中的数据重复?

  •  4
  • user2745246  · 技术社区  · 10 年前

    我正在尝试验证数据 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 我想尝试一下是否可以使用正则表达式。如果有困惑,请随意评论,因为这是我在Stack上的第一个问题。

    3 回复  |  直到 10 年前
        1
  •  1
  •   vks    10 年前
    ^(?!(?:^|.*,)([^,\n]*),.*\1(?:,|$)).*$
    

    试试看演示。

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

        2
  •  1
  •   Matt    10 年前

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

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

    工作原理: 该函数将字符串转换为一个列表,修剪元素,然后从中创建第二个不同的列表。最后,它比较两个列表中的元素数:如果不同列表的元素少于原始列表,则表示重复,函数返回true,否则为false。

    例子:

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

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

        3
  •  1
  •   Bohemian    10 年前

    这是有效的:

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

    看见 demo