c# - 正则表达式实例即使存在也找不到多个匹配项

标签 c# regex

我正在使用正则表达式,我写了这个:

 static void Main(string[] args)
    {
        string test = "this a string meant to test long space recognition      n       a";
        Regex regex = new Regex(@"[a-z][\s]{4,}[a-z]$");
        MatchCollection matches = regex.Matches(test);
        if (matches.Count > 1)
            Console.WriteLine("yes");
        else
        {
            Console.WriteLine("no");
            Console.WriteLine("the number of matches is "+matches.Count);
        }
    }

在我看来,Matches 方法应该同时找到“n n”和“n a”。然而,它只能找到“n n”,我只是不明白为什么会这样......

最佳答案

正则表达式中的 $ 表示模式必须出现在行尾。如果你想找到所有的长空格,这个简单的表达式就足够了:

\s{4,}

如果你真的需要知道空格是否被a-z包围,你可以这样搜索

(?<=[a-z])\s{4,}(?=[a-z])

这使用模式...

(?<=prefix)find(?=suffix)

...并查找包含在前缀和后缀之间的位置。前缀和后缀不是匹配的一部分,即 match.Value 仅包含连续的空格。因此,您不会遇到 Jon Skeet 提到的 “n” is consumed 问题。

关于c# - 正则表达式实例即使存在也找不到多个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14527460/

相关文章:

c# - SendKeys.使用 Internet Explorer 发送

绝对和相对 URL 的 javascript 正则表达式

javascript - 用于替换嵌套结构中匹配括号的正则表达式

python - 如何使用pandas提取特定内容并获取android版本

c# - 传入字典的模型项的类型为 'System.Data.Entity.Infrastructure.DbQuery' ,但该字典需要类型为 B 的模型项

c# - 在 C# 中处理窗体上的控件时何时使用 THIS 关键字

javascript - 用于在 PHP 上剥离 javascript 的正则表达式

javascript - 如何在不替换标签本身的情况下替换html标签之间的内容

c# - 如何从代码运行 Azure DevOps 管道?

c# - MemberInfo 和 FieldInfo 有什么区别