我不得不接管 ac# 项目。最初开发该软件的人深深地爱上了他,#region
因为他用区域包装了所有东西。这让我几乎疯了,我正在寻找一个工具或插件来#region
从项目中删除所有内容。周围有东西吗?
8 回答
只需使用 Visual Studio 内置的“查找和替换”(或“在文件中替换”,您可以按Ctrl+ Shift+打开H)。
要删除#region
,您需要启用正则表达式匹配;在“替换文件”对话框中,选中“使用:正则表达式”。然后,使用以下模式:“ \#region .*\n
”,将匹配项替换为""
(空字符串)。
要删除#endregion
,请执行相同操作,但使用 " \#endregion .*\n
" 作为您的模式。正则表达式对于 来说可能是多余的#endregion
,但它不会受到伤害(以防以前的开发人员曾经在与 an#endregion
或其他内容相同的行上留下评论)。
注意:其他人发布的模式也应该对你有用,它们与我的略有不同,但你明白了一般的想法。
使用一个正则表达式^[ \t]*\#[ \t]*(region|endregion).*\n
同时查找:region 和 endregion。替换为空字符串后,将删除带有前导空格的整行。
[ \t]*
- 找到前导空格
\#[ \t]*(region|endregion)
- 查找#region 或#endregion(也非常罕见的情况是# 后面有空格)
.*\n
- 查找 #region 或 #endregion 之后的所有内容(但在同一行)
编辑:答案更改为与旧的 Visual Studio 正则表达式语法兼容。是:(问号不适用于旧语法)^[ \t]*\#(end)?region.*\n
编辑2:[ \t]*
在# 之后添加以处理@Volkirith 发现的非常罕见的情况
在查找和替换中,使用{[#]<region[^]*}
forFind what:
并将其替换为空字符串。
#EndRegion
很简单,可以更换。
如果您必须与区域爱好者合作(并保持区域不变),那么我会推荐“我讨厌 #Regions” Visual Studio 扩展。它使区域可以容忍 - 默认情况下所有区域都被扩展,#region 指令以非常小的字体呈现。
对于任何使用 ReSharper 的人来说,这只是区域线上的一个简单的 Atr-Enter。然后,您可以选择删除文件、项目或解决方案中的区域。
要删除带有换行符的#region,请将以下内容替换为空字符串:
^(?([^\r\n])\s)*\#region\ ([^\r\n])*\r?\n(?([^\r\n])\s)*\r?\n
要将 #endregion 替换为前导空行,请将以下替换为空字符串:
^(?([^\r\n])\s)*\r?\n(?([^\r\n])\s)*\#endregion([^\r\n])*\r?\n
如何为它编写自己的程序,以递归方式替换 basePath 中所有 *.cs 文件中没有任何内容的区域?
(提示:如果不是 UTF8,请小心读取文件。)
public static void StripRegions(string fileName, System.Text.RegularExpressions.Regex re)
{
string input = System.IO.File.ReadAllText(fileName, System.Text.Encoding.UTF8);
string output = re.Replace(input, "");
System.IO.File.WriteAllText(fileName, output, System.Text.Encoding.UTF8);
}
public static void StripRegions(string basePath)
{
System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex(@"(^[ \t]*\#[ \t]*(region|endregion).*)(\r)?\n", System.Text.RegularExpressions.RegexOptions.Multiline);
foreach (string file in System.IO.Directory.GetFiles(basePath, "*.cs", System.IO.SearchOption.AllDirectories))
{
StripRegions(file, re);
}
}
用法:
StripRegions(@"C:\sources\TestProject")
您可以使用通配符查找/替换:
*\#region *
*\#endregion
并替换没有价值。(注意#
需要转义,因为visual stuido使用它来匹配“任何数字”)