【问题标题】:What will be the regular expression for pattern like 4,1,66,11,2,77,25,2,99,4,5?像 4,1,66,11,2,77,25,2,99,4,5 这样的模式的正则表达式是什么?
【发布时间】:2013-05-06 14:54:36
【问题描述】:

4,1,66,11,2,77,25,2,99,4,5 这样的模式的正则表达式是什么

我正在使用 .NET 验证控件。

【问题讨论】:

  • 你能更一般地解释一下你想要的模式应该是什么样子吗?
  • 不仅模式不清楚,而且您尝试使用的工具也不适用于生成/验证此类系列。
  • 我只希望有 b 个最小 1 和最大 4 位(1,24,2,464,746,12,3488,3)的整数,用逗号分隔。
  • @MuhammadShariqIqbal 查看正则表达式维基百科文章然后自己构建它怎么样?这并不难,了解一点正则表达式通常很有用。
  • 您应该在问题中包含您已经尝试过的内容,以及无效的原因以及无效的原因,否则投票很难;)

标签: .net regex validation


【解决方案1】:

以下 (.net) 表达式匹配整个字符串:"(\\d+,)*"。使用子表达式,您还可以匹配数字:"((\\d+),)*"(最里面的捕获组包含数字)。

编辑: 包括@metadings 解决方案的完整性:

要匹配逗号之间的任意位数(在示例中为 1 和 4 之间),请使用大括号:
"((\\d{1,4}),)*"

【讨论】:

  • 需要对此进行一些修改 (\d+,)*(\d+) 它正在接受 2324324324,45343224,523434,523434,33424 的结果,但我希望数字长度不应该大于四。比如 232,3,3434,1,53
  • @MuhammadShariqIqbal 欢迎来到 StackOverflow。这个答案是正确的,所以请考虑接受它。你没有在你的 OP 中提到额外的要求。你最终要找的是((\\d{1,4}),)*
  • 谢谢 :) 我找到了我的解决方案 ((\d{1,4}),)*(\d{1,4})
【解决方案2】:

为什么要在最终模式((\d{1,4}),)*(\d{1,4}) 中使用\d 创建两个组,试试这样:

(\d+,?)

或限制要捕获的位数为:

(\d{1,4},?)

它将使组如下:

"1," , "4," .... 等

如果您想排除 , 将其排除在组之外,例如:

(\d+),?

(\d{1,4}),?

【讨论】:

  • 那么,字符串1,应该被认为是有效的吗?
  • @svick,不,这就是为什么建议使用最后一种模式。用户采用的模式也沿逗号捕获一个组,并且没有清楚地记录该组是否未采用或与代码中的某些 TRIM 函数一起使用。
  • 因为我想用数字而不是逗号结束它,这就是为什么我用 \d 做了两个组
  • @MuhammadShariqIqbal,所以在我的回答中使用最后一个模式。它将解决您的问题。
猜你喜欢
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2022-06-29
  • 1970-01-01
  • 2011-03-08
  • 2015-07-22
  • 1970-01-01
相关资源
最近更新 更多