2011-06-28 79 views
0

一个子这里是我的xyz.csproj文件中的一行:替换使用正则表达式

<Reference Include="SomeDLLNameHere, Version=10.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" /> 

所有我需要做的是更换“版本= 10.2.6.0”到“版本= 11.0.0.0”。

我需要这样做的程序是使用VBScript的VSBuild,所以我相信。

问题是我无法硬编码'旧'版本号。因此,我需要更换如下:

<Reference Include="SomeDLLNameHere, Version=10.2.6.0, 

为此我需要一个正则表达式,将记住,在引用的例子中,10.2.6.0可以是任何上述轴承相匹配。

我相信,这将选择包括和

之间
'<Reference Include="SomeDLLNameHere' and '>' is what I need. 

有类似的要求,但没有其他引用文本中的正则表达式似乎为我顶工作。

我通常会使用C#来做这种事情,VBScript /正则表达式是我避免的瘟疫。

+2

's/Version = [\ d。] +/Version = 11.0.0.0/g'会将每个版本号替换为新版本号,不知道如何在VBScript中执行它。另外,如果人们帮助你,你应该接受更多的答案。 – NorthGuard

+0

感谢inTide,但有很多dll的引用,我只需要更新其中的一个,不是全部。 – David

回答

1

对于大多数正则表达式的味道,你会使用这样的:

<Reference Include="SomeDLLNameHere.*?/> 

对于Visual Studio,我不知道,如果*?会工作...试试这个:

+0

感谢您的建议,但我没有在代码中这样做。我只需要光秃秃的正则表达式。 – David

+0

你是在查找/替换对话框中执行它吗?这有一个非常不同的语法。 –

+0

@David,我更新了正则表达式。 –

0

这正则表达式模式应该工作

"(<Reference[^>]+Version=)([^,]+)," 

应用使用VBScript

str1 = "<Reference Include=""SomeDLLNameHere, Version=10.2.6.0," 

    ' Create regular expression. 
    Set regEx = New RegExp 
    regEx.Pattern = "(<Reference[^>]+Version=)([^,]+)," 

    ' Make replacement. 
    ReplaceText = regEx.Replace(str1, "$111.0.0.0,") 
    WScript.echo ReplaceText 

给出正确的结果

<Reference Include="SomeDLLNameHere, Version=11.0.0.0, 

UPDATE

如果你需要Version=和标签使用,而不是>结束之间相匹配的东西,

"(<Reference[^>]+Version=)([^>]+)>" 
0

在C#或VBScript中使用正则表达式几乎相同,因为它都涉及到开发正则表达式。像这样的东西可能会有所帮助: <Reference\s+Include\s*=\s*\".+\",\s*Version\s*=\s*.+,

不确定在csproj文件中有关区分大小写和空格的规则是什么,但是这涵盖了前面描述的形式。请注意,“+”运算符表示一个或kleen。