虚拟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);

最佳答案

来自MSDN


  IgnorePatternWhitespace从模式中消除未转义的空白,并启用标有#...的注释。


#(含)中的所有内容均视为注释

在第二个示例中也是如此,但是在这种情况下,下一行的)与第一行的(保持平衡。

因此,第二个正则表达式模式实际上是(^\s*)-第三个是(^s*-这是无效的。

您可能想用#替换\#

10-08 19:21