我们有一个包含许多项目的大型解决方案,在整个项目中我们都有表格,消息等,我们可以参考公司名称。多年来,这个公司名称是相同的,所以它没有计划改变,但现在已经改变了。
该应用程序特定于美国的一个州,因此从不考虑或使用本地化/字符串资源文件。
快速查找单词的所有实例拉出1309行,但我们只需要更改实际最终显示给用户的行(按钮文本,消息文本等)。
稍后可以重构代码,以便在我们有时间确保没有任何中断时使其更具可读性,但暂时我们正在尝试查找所有可见实例并替换它们。
有没有办法轻松找到这些“实例”?也许是一种可以在Visual Studio中的“查找全部”功能中使用的正则表达式,只有当它包含在引号内时才会拉出单词?
在我走下兔子洞之前,我试图让我的工作变得更轻松,并且花费的时间远远超过一线一行,我想会看看是否有人之前做过这样的事情并且有解决方案
答案 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