正则表达式问题Visual Studio

时间:2011-05-26 14:02:46

标签: c# regex visual-studio

我想在C#代码中替换对资源文件的所有引用。

一个示例是包含多个引用的页面,例如:

Resources.Global.Firstname  
Resources.Global.Surname

我希望正则表达式找到所有这些(它们可能以;)结束。

使用正则表达式的初学者总数,因此我们将非常感激地收到任何建议。

4 个答案:

答案 0 :(得分:3)

您可以在Visual Studio中使用“查找和替换”窗口。

  1. 按Ctrl-H打开窗口。
  2. Resources\.Global\.{[^,) ;]+}放入“查找内容:”文本框中。
  3. GetStringValue("\1")放入“替换为:”文本框中。
  4. 确保将“查找范围:”下拉菜单设置为您要搜索的范围
  5. 展开“查找选项”子面板。
  6. 选中“使用:”旁边的框,并确保选中“正则表达式”。
  7. 这是做什么的:

    第一个正则表达式将找到以Resources.Global.开头的任何内容并捕获它之后的任何内容,直到它找到空格,逗号,关闭的paren或分号。

    第二个替换了GetStringValue("")找到的整个文本,并将捕获的文本放在括号中的引号内。

答案 1 :(得分:1)

为什么不用CTRL + H(快速查找和替换)并搜索实际条款而不是正则表达式模式?你想要重命名的是什么?

UPDATE 匹配的模式类似于:Resources.Global。([^};] +)

替换模式将是GetStringValue(“\ 1”)

答案 2 :(得分:0)

正如Blazes所说,在你提到的场景中,Refactoring是真正的答案。如果您只想查看它们,请右键单击定义并选择查找所有引用。如果你想改变它,只需进行更改,然后按ctrl + shift + F11,会出现一个上下文菜单,让你有机会重命名所有引用。

答案 3 :(得分:0)

正则表达式:

(Resources\.Global\.[A-Z][a-zA-Z]*[;\)])

将仅查找以下测试行中的最后两行:

Resources.Global.Firstname  
Resources.Global.Surname
Resources.Global.Firstname;  
Resources.Global.Surname)

使用代码验证:

Regex regex = new Regex(@"(Resources\.Global\.[A-Z][a-zA-Z]*[;\)])");
MatchCollection mc = regex.Matches("Resources.Global.Firstname\n" + 
    "Resources.Global.Surname" + 
    "Resources.Global.Firstname;" + 
    "Resources.Global.Surname)");

foreach (Match match in mc)
{
    Console.WriteLine(match.Groups[1].ToString());
}

该软件可能对您有所帮助:

Rad Software Regular Expression Designer