我正在尝试使用正则表达式检查文本行。
1,3,4,5,8,10,12,14,19,14
这里的数字用','分隔并且应该是非负数且小于或等于20。 而且任何数字都不应该重复。 这是我的模式。
^(?:(?:0[1-9]|[1-9]|1[0-9]|20),)*(?:0[1-9]|[1-9]|1[0-9]|20)$
但它不能检查重复。我该如何检查?
最佳答案
你想做的事情并不那么复杂。您只需要在每个匹配的数字之后检查该数字是否在字符串中再次出现:
^(?:(0[1-9]|[1-9]|1[0-9]|20),(?!.*\b\1\b))*(?:0[1-9]|[1-9]|1[0-9]|20)$
查看并测试here on Regexr .
在 C# 中:
string[] myStrings = { "1",
"1,2",
"01,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20",
"01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20",
"01,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,5",
"01,02,03,04,05,06,07,08,13,09,10,11,12,13,14,15,16,17,18,19,20" };
Regex reg = new Regex(
@"^
(?:(0[1-9]|[1-9]|1[0-9]|20),
(?!.*\b\1\b) # Fail if the before matched number occurs once more
)*
(?:0[1-9]|[1-9]|1[0-9]|20)
$",
RegexOptions.IgnorePatternWhitespace
);
foreach (string myString in myStrings)
Console.WriteLine("{0} {1} a valid string.",
myString,
reg.IsMatch(myString) ? "is" : "is not"
);
Console.ReadLine();
关于c# - 正则表达式检查重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14045620/