繁体   English   中英

正则表达式匹配数字模式

[英]Regular expression Match for numeric pattern

我正在解析用户提供的输入,该输入属于诸如199-234类的指定模式

在哪里

  1. 第一个分量是1
  2. 第二部分是99
  3. 第三部分是234

用户只提供前几个数字或整个字符串。 我打算解析每个组件。 我想出的正则表达式是-

Regex regex = new Regex(@"(?<first>\d)(?<second>\d{0,2})-?(?<third>\d{0,3})");
var groups = regex.Match(input);

如果我提供输入199 ,则正则表达式模式将它们分为3组,而不是预期的2组。实际结果是

  1. 第一个分量是1
  2. 第二部分是9
  3. 第三部分是9

在这种情况下,如何确保输入正确匹配?

尝试第三组的非贪婪版本: \\d{0,3}?

Regex regex = new Regex(@"(?<first>\d)(?<second>\d{0,2})-?(?<third>\d{0,3}?)");
var groups = regex.Match(input);

(为清楚起见)它也可能有助于绑定字符串的开头和结尾( ^$

new Regex(@"^(?<first>\d)(?<second>\d{0,2})-?(?<third>\d{0,3}?)$");

由于您的表达式需要第三个元素,因此不能将199作为两个组进行匹配,因为匹配需要三个组。

另外,您允许第二组和第三组的长度为零的匹配。

尝试为第二组要求两个字符,或者使第三组为可选字符。

将完整的最后一部分设为可选,而不仅仅是-

@"(?<first>\d)(?<second>\d{0,2})(?:-(?<third>\d{0,3}))?"

我将以-开头的完整的最后一部分放入一个可选的非捕获( (?:) )组(?:-(?<third>\\d{0,3}))? 因此,如果有- ,它将仅搜索第三组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM