[英]Regular expression Match for numeric pattern
我正在解析用户提供的输入,该输入属于诸如199-234
类的指定模式
在哪里
1
99
234
用户只提供前几个数字或整个字符串。 我打算解析每个组件。 我想出的正则表达式是-
Regex regex = new Regex(@"(?<first>\d)(?<second>\d{0,2})-?(?<third>\d{0,3})");
var groups = regex.Match(input);
如果我提供输入199 ,则正则表达式模式将它们分为3组,而不是预期的2组。实际结果是
1
9
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.