我正在尝试使用正则表达式检查文本行.
1,3,4,5,8,10,12,14,19,14
Run Code Online (Sandbox Code Playgroud)
这里的数字用','分隔,并且应该是非negetive并且小于或等于20.并且任何数字都不应该重复.这是我的模式.
^(?:(?:0[1-9]|[1-9]|1[0-9]|20),)*(?:0[1-9]|[1-9]|1[0-9]|20)$
Run Code Online (Sandbox Code Playgroud)
但它无法检查重复.我怎么检查呢?
你想做的不是那么复杂.如果字符串中再次出现此数字,您只需在每个匹配的数字后检查:
^(?:(0[1-9]|[1-9]|1[0-9]|20),(?!.*\b\1\b))*(?:0[1-9]|[1-9]|1[0-9]|20)$
Run Code Online (Sandbox Code Playgroud)
在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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |