正则表达式问题Visual Studio

本文关键字:Studio Visual 问题 正则表达式 | 更新日期: 2023-09-27 17:57:55

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

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

Resources.Global.Firstname  
Resources.Global.Surname

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

完全是正则表达式的初学者,所以这里的任何建议都将不胜感激。

正则表达式问题Visual Studio

您只需在Visual Studio中使用"查找和替换"窗口。

  1. 按Ctrl-H打开窗口
  2. Resources'.Global'.{[^,) ;]+}放入"查找内容:"文本框中
  3. GetStringValue("'1")放在"替换为:"文本框中
  4. 确保"查找范围:"下拉列表设置为要搜索的范围
  5. 展开"查找选项"子面板
  6. 选中"使用:"旁边的框,并确保已选中"正则表达式"

这是在做什么:

第一个正则表达式将查找以Resources.Global.开头的任何内容,并捕获其后的内容,直到找到空格、逗号、闭合括号或分号为止。

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

为什么不直接使用CTRL+H(快速查找和替换)并根据实际术语而不是regex模式进行搜索?您试图将从和重命名为什么?

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

替换模式为GetStringValue("''1")

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

正则表达式:

(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软件正则表达式设计器