【问题标题】:Regular expression with word boundaries is not matching带有单词边界的正则表达式不匹配
【发布时间】:2013-04-26 11:33:18
【问题描述】:

我正在尝试计算一个正则表达式以与具有DocumentWell 功能的 TFS Power Tools 一起使用。

我目前正在控制台应用程序中对此进行测试。

Console.WriteLine(Regex.IsMatch(@"C:\User\User\My Documents\Visual Studio 2010\Project\", "\bProject\b"));

这是我尝试过的(输出为“False”,所以我的正则表达式字符串是\bProject\b。我通过以下链接进行了操作:

http://www.regular-expressions.info/wordboundaries.html

我以为我明白了……我真的很纠结于正则表达式,所以有人可以帮我解决这个正则表达式并解释我做错了什么吗?

【问题讨论】:

    标签: c# regex visual-studio-power-tools


    【解决方案1】:

    对正则表达式也使用逐字字符串,请参阅String literals on msdn

    Console.WriteLine(Regex.IsMatch(@"C:\User\User\My Documents\Visual Studio 2010\Project\", @"\bProject\b"));
    

    否则你必须逃跑两次

    Console.WriteLine(Regex.IsMatch(@"C:\User\User\My Documents\Visual Studio 2010\Project\", "\\bProject\\b"));
    

    查看正则字符串和逐字字符串的区别

    string input = @"C:\User\User\My Documents\Visual Studio 2010\Project\";
    
    string reg = "\bProject\b";
    string regVerbatim = @"\bProject\b";
    
    Regex r = new Regex(reg);
    Regex rVerbatim = new Regex(regVerbatim);
    
    Console.Write("Regular String regex: " + r.ToString() + " isMatch :");
    Console.WriteLine(r.IsMatch(input));
    Console.Write("Verbatim String regex: " + rVerbatim.ToString() + " isMatch :");
    Console.WriteLine(rVerbatim.IsMatch(input));
    

    输出:

    正则字符串正则表达式:Projec isMatch :False
    逐字字符串正则表达式:\bProject\b isMatch :True

    在常规字符串中,正则表达式的最后一个“t”被删除,单词前的空字符串也被删除,这是因为字符串将 \b 解释为退格并且不会将其交给正则表达式解释器。

    因此,要么转义反斜杠,以便将 \\bProject\\b 中的 \bProject\b 传递给正则表达式解释器,要么使用逐字字符串,这样字符串就不会解释 \b

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      相关资源
      最近更新 更多