我试图弄清楚用于查找的正则表达式与确切的N次出现匹配,而不是更少,而不是更多,与一组字符匹配。它看起来像一个非常简单的任务,但我无法找到适当的正则表达式。
更具体地说,我想要一个正则表达式,告诉一个给定的字符串是否包含正好3个数字 - 不少于,不多于。
我以为我只需将3位数作为一组处理并在其后添加{1}的量词就可以实现它,但它不起作用。
或者,我预期[0-9] [0-9] [0-9]也能正常工作,但同样没有。对于输入集,正则表达式都会返回相同的结果 1,12,123,1234,12345。
以下是执行我尝试过的代码示例,如上所述。
class Program
{
static void Main(string[] args)
{
List<Regex> regexes = new List<Regex> { new Regex("\\d{3}"), new Regex("[0-9][0-9][0-9]"), new Regex("(\\d{3}){1}") };
List<int> numbers = new List<int> { 1, 12, 123, 1234, 12345 };
foreach(Regex regex in regexes)
{
Console.WriteLine("Testing regex {0}", regex.ToString());
foreach (int number in numbers)
{
Console.WriteLine(string.Format("{0} {1}", number, regex.IsMatch(number.ToString()) ? "is a match" : "not a match"));
}
Console.WriteLine();
}
}
}
上述程序的输出是:
显然,从所有输入值中只有123是匹配。 什么是正则表达式,对待&#34; 123&#34;单独作为一个匹配?
答案 0 :(得分:6)
所有正则表达式都适用于输入上的3位任何位置。您正在寻找:
new Regex("^\\d{3}$")
^
匹配输入的开头,$
匹配输入的结尾。所以这个正则表达式表示,&#34;从一开始,必须有三位数,然后期望结束。&#34;
答案 1 :(得分:3)
您应该使用^
作为前缀以指示字符串的开头,并使用$
来表示其结束。有关工作示例,请参阅http://regexr.com/3be8e。
答案 2 :(得分:1)
您应该查找n
个字符,后跟非字符。因此,如果您正在寻找数字,您应该寻找n
数字后跟一个非数字。确保你在正则表达式之前也是一个非数字。