C# 用于匹配不带';以后不要有空行

C# 用于匹配不带';以后不要有空行,c#,regex,visual-studio,replace,C#,Regex,Visual Studio,Replace,我想清理代码并在代码块后添加空行 例如: if (foo) { DoFooStuff(); } if (bar) { DoBarStuff(); } else { try { MightThrowError(); } catch (Exception ex) { LogError(ex); } } MoreStuffToDo(true); }[\r\n][\t*|\s*]. 如果if(ba

我想清理代码并在代码块后添加空行

例如:

if (foo)
{
    DoFooStuff();
}
if (bar)
{
    DoBarStuff();
}
else
{    
    try
    {
        MightThrowError();
    }
    catch (Exception ex)
    {
        LogError(ex);
    }
}
MoreStuffToDo(true);
}[\r\n][\t*|\s*].
如果
if(bar)
前面有一个空行,我发现这段代码更容易阅读,因此您可以看到这里有两个不同的条件。因此,我想匹配所有类似于第4行最后第二行的情况,并添加一个新行。但是,它不应与“else”、“catch”之前的大括号和嵌套块中最后第三行的大括号相匹配,后者是嵌套块中的另一个大括号

我正在Visual Studio 2017中使用Find函数,代码是C#。我对上述示例的期望结果是:

if (foo)
{
    DoFooStuff();
}

if (bar)
{
    DoBarStuff();
}
else
{    
    try
    {
        MightThrowError();
    }
    catch (Exception ex)
    {
        LogError(ex);
    }
}

MoreStuffToDo(true);
我尝试了以下正则表达式:

}[\r\n]\t*.
(即,匹配一个右大括号、一个换行符、任意数量的制表符和任意非换行符。)

我需要它同时匹配空格和制表符(如何使其成为“或”?),理想情况下,我不需要匹配后面的大括号,以及单词
else
catch
finally
。不过,我准备手动完成一些工作

是我正在寻找的可能,如果是,正则表达式是什么?

使用符号: | 用于正则表达式中的逻辑or。例如:

if (foo)
{
    DoFooStuff();
}
if (bar)
{
    DoBarStuff();
}
else
{    
    try
    {
        MightThrowError();
    }
    catch (Exception ex)
    {
        LogError(ex);
    }
}
MoreStuffToDo(true);
}[\r\n][\t*|\s*].
应匹配任意数量的制表符或任意数量的空白。但由于tab是一个空白字符,所以您可以直接使用它

}[\r\n][\s*].

您的意思是要将一行与一个
}
匹配,该行后跟一个以
开头的行(如果
),然后插入一个换行符?尝试
^([\t\p{Zs}]*}[\t\p{Zs}]*)\r\n([\t\p{Zs}]*if)\b
并替换为
$1\r\n\r\n$2
,您必须解析代码才能找到块。RegEx不代表parsing,也不一定是“if”这个词。在代码块后面没有空行的任何语句(与代码块无关,如'else'将是)。没有正则表达式不是用于解析的,但是如果可以将正则表达式用于我的目的,这会容易得多。那么,如何定义上下文呢?如果你不能做到这一点,这里就没有正则表达式了。你所说的上下文是什么意思?我希望在一个包含数百个代码文件的VisualStudio解决方案上运行它。感谢您提供有关逻辑OR的提示。我不能使用
\s
,因为它匹配任何空白字符,包括换行符。在这种情况下,您可以在字符类的管道上使用实际空格而不是它,这并不意味着
,而只是管道字符。