我不太熟悉正则表达式。我不得不使用它们,也许每隔几年使用一次,这主要是为了课程工作。无论如何,对于熟悉正则表达式的人来说,以下问题应该是一个相当直接的问题/答案。
我需要确保输入字段的文本遵循以下格式:
x y z
或
x,y,z
或
x y z / <same pattern can repeat for almost unlimited length>
或
x,y,z / <...> // Spaces after the comma are ok
其中x,y和z只能是整数。模式不能混合,所以你不能拥有
x, y, z / x y z / ...
我尝试了以下
([1-9] [1-9] [1-9])
获取x y z部分,但我不知道如何包含'/'和','
有什么建议吗?
答案 0 :(得分:5)
尝试将正则表达式分解为碎片。然后尝试将它们组合起来。
例如,像1024
这样的整数是一个或多个数字的序列,即[0-9]+
。等
语法:
digit ::= [0-9]
space ::= [ ]
slash ::= [/]
comma ::= [,]
integer ::= digit+
separator ::= space | comma
group ::= integer separator integer separator integer
group-sep ::= space slash space
groups ::= group ( group-sep group )*
正则表达式:
([0-9]+[ ,][0-9]+[ ,][0-9]+)([ ][/][ ][0-9]+[ ,][0-9]+[ ,][0-9]+)*
答案 1 :(得分:3)
我想你可以使用
Regex r = new Regex("^([0-9]+([ ,]|, )[0-9]+(\\2)[0-9]+)( [/] ([0-9]+(\\2)[0-9]+(\\2)[0-9]+)+)*$");
var x1 = r.IsMatch("1,2 3"); // false
var x2 = r.IsMatch("1 3 2 / 1 2 3"); // true
var x3 = r.IsMatch("1,3,2"); // true
var x4 = r.IsMatch("1 3 2 / 1"); // false
Console.WriteLine((x1 == false) ? "Correct" : "Error");
Console.WriteLine((x2 == true) ? "Correct" : "Error");
Console.WriteLine((x3 == true) ? "Correct" : "Error");
Console.WriteLine((x4 == false) ? "Correct" : "Error");
Console.ReadLine();
分成小片
[0-9]+ matches any number, even 0. If it can't start with 0
you will have to change it
[ ,] the separator allows a space or a comma
\\2 matches the same thing the second group matched (space or comma)
如果由/
启动,则第二个大括号匹配或不匹配此序列的迭代次数。
如果所有分隔符必须完全相同,请将它们替换为\\2
(只是不要替换第一个分组,即它将与组2匹配)。