替换解决方案中所有字符串中名称的所有实例

时间:2011-09-09 06:24:06

标签: regex visual-studio replace

我们有一个包含许多项目的大型解决方案,在整个项目中我们都有表格,消息等,我们可以参考公司名称。多年来,这个公司名称是相同的,所以它没有计划改变,但现在已经改变了。

该应用程序特定于美国的一个州,因此从不考虑或使用本地化/字符串资源文件。

快速查找单词的所有实例拉出1309行,但我们只需要更改实际最终显示给用户的行(按钮文本,消息文本等)。

稍后可以重构代码,以便在我们有时间确保没有任何中断时使其更具可读性,但暂时我们正在尝试查找所有可见实例并替换它们。

有没有办法轻松找到这些“实例”?也许是一种可以在Visual Studio中的“查找全部”功能中使用的正则表达式,只有当它包含在引号内时才会拉出单词?

在我走下兔子洞之前,我试图让我的工作变得更轻松,并且花费的时间远远超过一线一行,我想会看看是否有人之前做过这样的事情并且有解决方案

2 个答案:

答案 0 :(得分:1)

VS正则表达式功能已被完全剥离。它可能占全功能正则表达式的20%。这不足以满足您的需求。例如,解决此quote-delimited problem is to use non-greedy matching的一种方法,VS正则表达式不支持。

如果我在你的鞋子里,我会编写a perl script或在Visual Studio之外运行的C#程序集,并简单地浏览所有文件(具有特定的文件扩展名)并修复所有内容。然后重新加载到Visual Studio中,您就完成了。好吧,如果一切都顺利完成了正则表达式。

最终你必须注意的是这样的代码:

Log.WriteLine("Hello " + m_CompanyName + " There");

在这种情况下,正则表达式会认为“m_CompanyName”出现在两个引号之间 - 但它不是你的意思。在这种情况下,你需要更复杂,我想你会找到special .net regular expression extension的答案。

答案 1 :(得分:1)

你可以尝试一下。 (我希望你的代码受源代码控制!)

Foobar{[^"]*"([^"]*"[^"]*")*[^"]*}$

并替换为

NewFoobar\1

<强>解释

Foobar您要搜索的名称

[^"]*"缺少非贪婪修饰符的解决方法。 [^"]表示匹配除"之外的任何内容,这意味着匹配任何内容直至第一个"

([^"]*"[^"]*")*确保您只在引号内匹配。这可确保后面只有完整的引号集。

[^"]*确保在行结束前不再有引用$

{}花括号将所有这些内容跟随您的公司名称进入捕获组,您可以使用\1

来引用它