【问题标题】:Repeating pattern matching with Regex使用正则表达式重复模式匹配
【发布时间】:2017-04-07 06:18:18
【问题描述】:

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

模式:digit可能 "," digit)(可能 ;)

字符串不能以 ; 开头并且不以;结尾。 允许数字单独或与

我的正则表达式(不工作):((\d)(,\d)?)(;?) 问题是它似乎直到字符串末尾才检查。可选部件也让我头疼。

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

好的:

2,3;4,4;3,2

2,3

2

2,3;3;4,3

正常:

2,3,,,,

2,3asfafafa

;2,3

2,3;;3,4

2,3;3,4;

【问题讨论】:

  • 试试^\d(?:[;,]\d)*$
  • 字符串不能以分号结尾。
  • 那么,4;6;7;8 也可以吗?如果没有,你需要^\d(?:,\d)?(?:;\d(?:,\d)?)*$
  • 是的,但我只是注意到这种方法可能不适合使用正则表达式。由于我不断检查输入.. (2,) 应该被允许输入.. 我猜需要重新考虑这一点。
  • 也许^\d(?:,\d?)?(?:;\d(?:,\d?)?)*$ 会按照您需要的方式工作?数字可以多于一个吗?我看到你添加了+34,56 好吗?

标签: c# regex pattern-matching


【解决方案1】:

您的 ^[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*)?)*$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多