我试图弄清楚用于查找与一组字符恰好 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”单独视为匹配项的正则表达式是什么?
最佳答案
您所有的正则表达式都适用于输入中 任何地方 的 3 位数字。您正在寻找:
new Regex("^\\d{3}$")
^
匹配输入的开头,$
匹配输入的结尾。所以这个正则表达式表示,“从开始,必须有三位数字,然后期待结束。”
关于c# - 恰好 N 个元素的正则表达式,不多不少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31544251/