正则表达式以避免分隔字符串中的数据重复?
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 演示。
正则表达式在很多情况下都很有用。但是要检查字符串中的重复项可以像这样更容易(在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
我正在尝试验证 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 演示。
正则表达式在很多情况下都很有用。但是要检查字符串中的重复项可以像这样更容易(在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