在Visual Studio中使用正则表达式查找和替换程序集。

6
我们有一个解决方案,涉及25个项目,每个项目都有自己的AssemblyInfo。我试图将所有程序集号码递增,以便在下一次发布时增加一个主要版本。
我的正则表达式技能很有限,但基本上我想找到:
<Assembly: AssemblyVersion("x.x.x.x")>

在正则表达式中,x将会是\d/一个数字。 在这里查看此处,我认为我可以使用:

{AssemblyVersion("[\d].[\d].[\d].[\d]")}

无法正常工作,它不喜欢开放括号。我的问题基本上分为两个阶段:

  1. 我将使用什么正则表达式字符串来查找示例?
  2. 是否可能使用正则表达式将第一个数字替换为数字+1?(我觉得我有点乐观)如果可以,在这种情况下正则表达式字符串是什么?

这是在源代码控制中的,因此我不想直接修改文件。

提前致谢。


你说的\d/a数字是什么意思? - Ryan Gates
我不确定这是否有帮助,但您可以将您的“程序集版本”发布视为IP地址。它们经常用于查找和修改。其中一个正则表达式可能会起作用。 - Greg
@RyanGates 在正则表达式中,据我所知是\d。如果我的认识有点偏差,那就是一个数字! :P - LukeHennerley
2个回答

4
注意:这是使用Visual Studio正则表达式查找和替换的方法。
我认为在进行正则表达式替换时无法添加一个数字。但是,您可以替换为一个实际的数字。例如,您可以使用一个正则表达式将第一个数字1替换为99AssemblyVersion("1.0.2121.0") --> AssemblyVersion("99.0.2121.0") 以下是我在Visual Studio搜索和替换中使用的正则表达式:
Search Regex:  AssemblyVersion[(]["]([0-9]+)([.][0-9]+[.][0-9]+[.][0-9]+)["][)]
Replace Regex: AssemblyVersion("99${2}")

搜索正则表达式通过将所有特殊字符((."))用方括号括起来来进行转义。然后,它使用括号将版本号分成两组。第一组是第一组数字。第二组是最后三组数字。
例如,AssemblyVersion("1.0.2121.0")被分组如下(使用大括号进行分组):AssemblyVersion("{1}{.0.2121.0}")。因此,第一组是1,第二组是.0.2121.0
替换正则表达式AssemblyVersion("99${2}")使用字面量和搜索正则表达式的第二组来构建替换字符串。 ${2}表示使用来自第二组的文本。其余字符串是文字。

这看起来很完美 :) 我正在从手动操作转向获取自动化构建以递增版本号,这样我就不必再手动操作了,但这对我来说可行。谢谢。 - LukeHennerley

0
如果你要使用C#来查找文本,那么我认为这是你需要的正则表达式 - 我已经将其包装在一个verbatim字符串中并转义了双引号。
Regex regex = new Regex(@"<Assembly: AssemblyVersion\(""\d+\.\d+\.\d+\.\d+""\)>");

如果你想挑选元素来操作字符串并生成一个新的字符串,那么可以加上一些括号,像这样:

Regex regex = new Regex(@"<Assembly: AssemblyVersion\(""(\d+)\.(\d+)\.(\d+)\.(\d+)""\)>");

然后,您可以单独访问数字,使用正则表达式组创建新字符串:

Match match = regex.Match(your_search_text);
if (match.Success)
{
    Console.WriteLine(match.Groups[1].Value);
    Console.WriteLine(match.Groups[2].Value);
    Console.WriteLine(match.Groups[3].Value);
    Console.WriteLine(match.Groups[4].Value);
}

我认为这已经超出了查找和替换的范畴。当需要搜索许多文件以查找文本模式时,我会启动PowerShell,因为这确实是命令行的理想任务。 - Dave Sexton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接