重复模式匹配正则表达式

时间:2017-04-07 06:18:18

标签: c# regex pattern-matching

我正在尝试使用正则表达式验证输入。到目前为止,我的所有测试都失败了,因为我对正则表达式的经验有限,我认为有人可能会帮助我。

模式:数字可能 "," 数字)(可能 ;

字符串不能以a开头;而不是以; 数字可以单独使用或与

一起使用

我的regEx(不工作):((\d)(,\d)?)(;?)问题是它在字符串结尾之前似乎没有检查。此外,可选部件令我头疼。

更新:^[0-9]+(,[0-9])?(;[0-9]+(,[0-9])?)+$这似乎效果更好,但与单个数字不匹配。

行:

2,3; 4,4; 3,2

2,3

2

2,3; 3; 4,3

NOK:

2,3 ,,,,

2,3asfafafa

; 2,3

2,3 ;; 3,4-

2,3; 3,4;

1 个答案:

答案 0 :(得分:2)

您的^[0-9]+(,[0-9])?(;[0-9]+(,[0-9])?)+$正则表达式匹配1位或更多位数,然后是,和1位数的可选序列,后跟一个或多个类似序列。

您需要匹配零个或多个以逗号分隔的数字:

^\d+(?:,\d+)?(?:;\d+(?:,\d+)?)*$
                              ^

请参阅regex demo

现在,调整部分:

  • 如果只匹配一位数字,请使用^\d(?:,\d)?(?:;\d(?:,\d)?)*$
  • 如果以逗号分隔的数字对可以将第二个元素设为空,请在每个?之后添加,\d(如果要匹配单个数字)或*(如果数字可以有多个数字):^\d(?:,\d?)?(?:;\d(?:,\d?)?)*$^\d+(?:,\d*)?(?:;\d+(?:,\d*)?)*$