我需要能够匹配一系列数字(1
和9
之间的任意数字),与用户输入的数字不同但不重复。
123456789 - >比赛
1223 - >没有比赛
实际上,数字必须介于1到9位之间,仅包含数字,而不是重复任何数字。
如何使用正则表达式执行此操作?
答案 0 :(得分:3)
下面的内容应该有效:
(?!.*([1-9]).*\1)^[1-9]{1,9}$
(?!.*([1-9]).*\1)
- 负面预测,检查数字是否重复。
答案 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
),只需要那些不包含多个数字的匹配一次重复。