使用正则表达式匹配一系列数字1-9,不重复

时间:2011-05-27 01:11:06

标签: c# regex

我需要能够匹配一系列数字(19之间的任意数字),与用户输入的数字不同但不重复。

  

123456789 - >比赛
  1223 - >没有比赛

实际上,数字必须介于1到9位之间,仅包含数字,而不是重复任何数字。

如何使用正则表达式执行此操作?

4 个答案:

答案 0 :(得分:3)

下面的内容应该有效:

(?!.*([1-9]).*\1)^[1-9]{1,9}$

(?!.*([1-9]).*\1) - 负面预测,检查数字是否重复。

示例匹配:http://regexr.com?2trr6

答案 1 :(得分:1)

老实说,我使用的是比c#更多的PHP,但这应该可行

^(?:([1-9])(?![1-9]*?\1))*$

答案 2 :(得分:0)

^(?:([1-9])(?!\1))+$

即一个数字,后跟一个不同数字的数字,至少一次。

抱歉,误解了问题。我认为你的意思是,如果连续两次使用相同的数字,它应该会失败。如果您不想重复整个数字序列,请使用:

^(?:([1-9])(?!.*\1))+$

答案 3 :(得分:0)

这是不同的解决方案。这就是我要做的。我不是前瞻/外观的忠实粉丝,除非他们使代码变得更容易。

string numbers = "123456789";
string example = "12345 1123456 19283741 987654321";

var matches = Regex.Matches(example, @"\d+");
for (int i = 0; i < matches.Count; i++) {
    var match = matches[i].Value;
    if (!numbers.Any(number => match.Count(x => x == number) >= 2)) {
        Console.WriteLine(match);
    }
}

如果你运行它,你会看到它打印出来:

12345
987654321

我认为我在这里做的很简单。

我正在从文本中提取所有数字,无论它是否有重复的数字,然后,对于每个数字(1 - 9),只需要那些不包含多个数字的匹配一次重复。