【发布时间】:2015-10-11 05:08:08
【问题描述】:
我试图找出正则表达式用于查找与恰好 N 次出现的匹配项,而不是更少,而不是更多,一组字符。这看起来是一个非常简单的任务,但我一直找不到合适的正则表达式。
更具体地说,我想要一个正则表达式来判断给定字符串是否正好包含 3 位数字 - 不是更少,不是更多。
我以为我可以通过将 3 位数字视为一个组并在其后添加一个量词 {1} 来实现它,但它不起作用。
另外,我希望 [0-9][0-9][0-9] 也能正常工作,但又没有。对于输入集,两个 regexes 返回完全相同的结果 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 个匹配。 将“123”单独视为匹配的正则表达式是什么?
【问题讨论】: