c# - 恰好 N 个元素的正则表达式,不多不少

标签 c# regex

我试图弄清楚用于查找与一组字符恰好 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();
        }
    }
}

上面程序的输出是: enter image description here

显然,所有输入值中只有 123 是匹配项。 将“123”单独视为匹配项的正则表达式是什么?

最佳答案

您所有的正则表达式都适用于输入中 任何地方 的 3 位数字。您正在寻找:

new Regex("^\\d{3}$")

^ 匹配输入的开头,$ 匹配输入的结尾。所以这个正则表达式表示,“从开始,必须有三位数字,然后期待结束。”

关于c# - 恰好 N 个元素的正则表达式,不多不少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31544251/

相关文章:

c# - ASP.NET MVC 2 - POST 后 ViewData 为空

c# - 在同一 Controller 中具有相同操作名称的 GET 和 POST 方法

c# - 如何返回通用列表?

regex - 如何使用正则表达式获取前一个单词?

python - 如何将 _sre.SRE_Match 类型转换为字符串和整数

regex - Sed 用新的目录结构替换行 "Linux Directory "

c# - 如何允许我的应用程序在 Windows 启动时运行(或更好的用户登录)而不会被 vista/7 阻止

c# - 用户登录后缓存用户信息

regex - 从匹配条件结束开始匹配的正则表达式

regex - 使用 sed 转义正则表达式