为什么IgnorePatternWhitespace会破坏正则表达式?

2 .net c# regex

虚拟1和2不会抛出异常但虚拟3会抛出异常.此外,它似乎dummy2没有正确运行我的正则表达式(从较长的真实版本判断).为什么这些不同?第一个在模式中没有空格,另外两个应该忽略空格,创建相同的模式

拥有一条线完美无缺,但更难阅读和编辑.

    Regex dummy1 = new Regex(@"(^\s*#(?<test>.*))", RegexOptions.Compiled );
    Regex dummy2 = new Regex(@"(^\s*#(?<test>.*)
)", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
    Regex dummy3 = new Regex(@"(^\s*#(?<test>.*))", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 8

来自MSDN

IgnorePatternWhitespace消除模式中未转义的空白区域并启用标记为#的注释...

来自#(包含)的所有内容都被视为评论

在第二个例子中也是如此,但是在这种情况下),下一行的平衡(就在第一行上.

所以第二个正则表达式模式实际上是(^\s*)- 而第三个是(^s*- 它是无效的.

你可能希望替换#\#.