我在Visual Studio中有一个.NET解决方案,包含很多项目,每个项目都包含一个带有各种版权文本的AssemblyInfo.cs
,例如:
[assembly: AssemblyCopyright("Copyright © Microsoft 2005")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyCopyright("Copyright © MyCompany 2014")]
我希望使用正则表达式的力量来找到所有匹配的字符串
[assembly: AssemblyCopyright("<<variable>>")]
并替换它
[assembly: AssemblyCopyright("Copyright © MyCompany 2017")]
什么是匹配<fixed-string><variable-length-string><fixed-string>
的正则表达式?
我试过了
[assembly: AssemblyCopyright("(.*)")]
但它似乎匹配文件中的每个字符。
var input = @"
[assembly: AssemblyCopyright(""Copyright © Microsoft 2005"")]
[assembly: AssemblyCopyright(""Copyright © 2016"")]
[assembly: AssemblyCopyright(""Copyright © MyCompany 2014"")]
";
var reg = new Regex(@"\[assembly: AssemblyCopyright\(""[^""]+""\)\]");
var result = reg.Replace(input, "[assembly: AssemblyCopyright(\"Copyright © MyCompany 2017\")]");
说明:
[^ X] =除X之外的任何字符
[^ X] + =除X之外的任何字符中的一个或多个
[^“”] + =除了“(双用于逃脱)之外的任何字符中的一个或多个
这更具体,但。+或。*也有效。
感谢Barmar,我意识到这有效:
\[assembly: AssemblyCopyright\("(.*)"\)\]
转义固定字符串中的特殊正则表达式字符并使用(。*)测试变量字符串非常有效。