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

时间:2015-02-27 06:25:49

标签: regex regex-lookarounds regex-greedy

我正在尝试验证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]*)*$ 应该传递或匹配,因为它不包含任何重复值。

这是我匹配每个值但不确定如何检查重复的原因。

Regex

这将匹配分隔符之间的值,但不确定如何检查是否存在重复值。任何帮助都会很棒 注意 - 我知道我可以使用sting函数和循环来执行此操作我正在学习{{1}}并想尝试使用正则表达式。如果有混淆,请随意评论这是我在Stack上的第一个问题。

3 个答案:

答案 0 :(得分:1)

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

试试这个。看看演示。

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

答案 1 :(得分:1)

正则表达式在很多情况下都很有用。但是要在字符串中检查重复项可以实现更容易(在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

答案 2 :(得分:1)

这有效:

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

请参阅demo