使用RegEx替换子字符串

时间:2011-06-28 02:50:23

标签: regex

这是我的xyz.csproj文件中的一行:

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

我需要做的就是将'Version = 10.2.6.0'替换为'Version = 11.0.0.0'。

我需要执行此操作的程序是VSBuild,它使用VBScript,所以我相信。

问题是我无法对“旧”版本号进行硬编码。因此,我需要更换以下内容:

<Reference Include="SomeDLLNameHere, Version=10.2.6.0,

因此我需要一个符合上述要求的正则表达式,在引用的例子中,10.2.6.0可以是任何东西。

我相信一个正则表达式会选择包含和之间的文本

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

还有其他类似请求的引用,但似乎没有一个对我来说是最重要的工作。

我通常会使用C#来做这类事情而且VBScript / Regex就像瘟疫一样是我避免的。

3 个答案:

答案 0 :(得分:1)

对于大多数正则表达式,您可以使用:

<Reference Include="SomeDLLNameHere.*?/>

对于visual studio,我不确定*?是否可行...试试这个:

\<Reference Include="SomeDLLNameHere[^/]*\/\>

答案 1 :(得分: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,

<强>更新

如果您需要匹配Version=与标记末尾匹配的内容,请使用>代替,

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

答案 2 :(得分:0)

将Regex与C#或VBScript一起使用几乎是一样的,因为它都是为了开发正则表达式。这样的事可以帮助: <Reference\s+Include\s*=\s*\".+\",\s*Version\s*=\s*.+,

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