带有单词边界的正则表达式不匹配

时间:2013-04-26 11:33:19

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

我正在尝试使用带有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

我认为我明白了...我真的很难与正则表达式斗争所以有人可以帮我解决这个正则表达式并解释我做错了什么?

1 个答案:

答案 0 :(得分:2)

还要为正则表达式使用逐字字符串,请参阅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));

输出:

  

Regular String regex:Projec isMatch:False
  Verbatim String regex:\ bProject \ b isMatch:True

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

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