【问题标题】:Regex for integers delimited by commas用逗号分隔的整数的正则表达式
【发布时间】:2016-11-10 11:16:03
【问题描述】:

我需要一个Regex,它只允许用逗号2,-3,4分隔的整数(正数和负数),但逗号只能在两个整数的中间,不能在开头或结束或两个连续的逗号,如23,34,,4

目前我有这个:

Regex regex = new Regex(@"^\d{1,10}([,]\d{10})*$");
 if (!regex.IsMatch("123,34,2,34,234"))

但它似乎不匹配任何东西,它甚至拒绝像123,34,2,34,234这样的有效输入

你能指出我上面的正则表达式有什么问题吗?

【问题讨论】:

  • \d{10} 仅匹配 10 位数的块。你的意思是@"^\d{1,10}(,\d{1,10})*$"

标签: c# regex


【解决方案1】:

\d{10} 子模式仅匹配 10 位数的块。

您需要允许 1 到 10 与 {1,10}(或 1 和更多与 +)与

@"^\d{1,10}(?:,\d{1,10})*$"

@"^\d+(?:,\d+)*$"

注意使用不存储子匹配的非捕获组(?:...),仅用于对一系列子模式进行分组。

regex demo

编辑:要允许匹配负值,请添加可选的-

@"^-?\d+(?:,-?\d+)*$"
   ^^       ^^  

another regex demo

【讨论】:

  • 这一切都很好,除了它不允许负整数。根据它2,14,124,-124,2 是一个无效的输入,但2,14,124,124,2 是正确的。
  • 只需将可选的连字符添加到模式中,-?? 量词匹配 1 次或 0 次出现的量化子模式。
猜你喜欢
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多