c# - 正则表达式检查重复

标签 c# java regex

我正在尝试使用正则表达式检查文本行。

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/

相关文章:

c# - 为什么resharper建议const,静态操作?

java - 比较器以错误的顺序给出数据

java - 比较两个字符串数组,分别返回匹配的字符串和不匹配的字符串

java - 老虎机时间线动画不起作用

Python Regex - 不捕获非字母数字

java - 正则表达式替换一个字符或仅替换一个重复的字符

javascript - 正则表达式 - 抓取所有 <li> 标签

c# - 在哪里放置代码以在 View 中创建大量按钮?

c# - 动态创建具有泛型类型的空事件委托(delegate)

c# - LINQ/EF 为性能声明临时变量