5

我有一个包含多个项目的解决方案,我们需要做一些严肃的全球替换。

有没有办法在替换后保留一些值的情况下进行通配符替换?

因此,例如,如果我希望每个HttpContext.Current.Session[“whatevervalue”]都成为HttpContext.Current.Session[“whatevervalue”].ToString()传入的字符串值将被尊重?我不想替换“whatevervalue”,我只想在模式匹配的地方附加一个 .ToString() 。

这在 Visual Studio 中可行吗?

4

6 回答 6

18

首先,备份您的项目,以防万一……在大规模更换之前总是一个好主意。

然后,在查找/替换对话框中,选择使用正则表达式复选框:

在“查找”框中,使用以下模式:

HttpContext\.Current\.Session\["{.@}"\]

并在替换框中,使用:

HttpContext.Current.Session["\1"].ToString()
于 2008-10-13T20:54:14.410 回答
4

简单...使用正则表达式和分组。

找到什么:(HttpContext.Current.Session[“whatevervalue”])

替换为:\0.ToString();

记得检查使用:并选择正则表达式

于 2008-10-13T20:50:06.710 回答
4

您要打开“查找选项”扩展器并选择“使用正则表达式”选项。完成后,您希望这些作为您的查找/替换条目:

寻找:

HttpContext\.Current\.Session\[{("([^"]|\")*")}\]

代替:

HttpContext.Current.Session[\1].ToString()

附加说明:

启用正则表达式选项后,您将能够使用指向右侧的三角形按钮来访问 Visual Studio 的 Regex 语法片段。

另请注意,Visual Studio 的 Regex 语法非常贫乏,因为它自 Visual Studio 6(或更早?)时代以来就没有改变——所以不要认为任何语法元素是理所当然的。

例如,有人可能认为我上面的 find 正则表达式被破坏了,因为双引号之前的反斜杠没有正确转义,但实际上,在此处放置双反斜杠会破坏表达式,而不是修复它。

于 2008-10-13T20:56:56.480 回答
2

这些答案似乎都不适用于 Visual Studio 2013,因为该版本似乎终于切换到标准 RegEx。但是,非 RegEx 专家或习惯于旧的 VS Find/Replace RegEx 语法的人会发现 RegEx Shortcut 按钮非常有用。

请参阅此答案以获取更多信息,包括查找/替换/环绕示例:

Visual Studio 的“查找和环绕”而不是“查找和替换”

于 2014-10-28T18:14:47.363 回答
0

您可以将Visual Assist用于此类任务。它是用于不同类型重构的强大工具。

于 2008-10-13T20:50:57.613 回答
0

您还可以考虑使用http://www.devexpress.com/Products/NET/IDETools/RefactorASP/上提供的免费下载工具 Refactor

它所做的不仅仅是查找和替换,他们称之为重命名具有更易于理解的名称的成员。它的各种功能将轻松帮助您改进代码。

于 2008-10-13T21:42:26.013 回答