正则表达式恢复VisualStudio Designer代码

时间:2016-06-20 19:54:52

标签: c# regex visual-studio decompiler

我从一个反编译的VisualStudio项目中恢复了一个C#项目。我正在尝试恢复.Designer.cs文件,但反编译文件中的代码格式与VisualStudio期望的格式不匹配。

特别是我需要删除临时变量的使用。我正在寻找一个正则表达式,我可以在VisualStudio中使用它进行搜索和替换,以重新格式化以下类型的代码:

替换:

Label label1 = this.Label1;  
Point point = new Point(9, 6);  
label1.Location = point;  

使用:

this.Label1.Location = new Point(9, 6);  

替换:

TextBox textBox5 = this.txtYear;  
size = new System.Drawing.Size(59, 20);  
textBox5.Size = size;  

使用:

this.txtYear.Size = new System.Drawing.Size(59, 20);  

1 个答案:

答案 0 :(得分:0)

这是一个正则表达式替换,适用于您给出的两个示例。我确认它在this online .NET regex tester中进行了预期的修改。

您可能需要进一步修改此正则表达式以满足您的需求。首先,我不确定您的文件中的代码有多么多样。如果将“普通”C#代码与这些三行片段混合在一起,那么这个正则表达式就会搞砸它们。您还没有指定文件中这些三行片段的分隔方式,因此您必须编辑正则表达式,以便它可以找到三行片段的开头。例如,如果所有三行代码段都以两个Windows格式的换行符开头,则可以将\r\n\r\n添加到正则表达式的开头以检测这些换行符,并添加到替换的开头,以便保留它们。

查找正则表达式

[^=]+=\s*([^;]+);\s*\n[^=]+=\s*([^;]+);\s*\n\w+(\.[^=]+=\s*)\w+;

带有空格和注释的版本:

[^=]+=\s*      # up to the = of the first line
([^;]+)        # first match: everything until…
;\s*\n         # the semicolon and end of the first line

[^=]+=\s*      # up to the = of the second line
([^;]+)        # second match: everything until…
;\s*\n         # the semicolon and end of the second line

\w+            # variable name (assumed to be the first line)
(\.[^=]+=\s*)  # third match: “.propertyName = ”
\w+            # variable name (assumed to be the second line)
;              # semicolon at the end of the line

替换字符串

$1$3$2;

这等于符号后的第一行,然后是.propertyName =,然后是等号后的第二行,然后是结束分号。