替换属性中的标志

时间:2013-12-20 07:45:48

标签: msbuild msbuild-task msbuild-4.0 msbuildextensionpack

假设我在一个属性中得到了这个AB_1.2.3.112211

我想要的是交换第一个“。”到“_”

因此它变为AB_1_2.3.112211 两个第一个字符可能更长fx ABCD_1.2.3.112211但它应该仍然是输出ABCD_1_2.3.112211

有没有办法在msbuild任务中执行此操作?

1 个答案:

答案 0 :(得分:5)

如果输入字符串始终与您显示它们,即第一个“。”要替换后跟一个下划线后跟一个数字,你可以使用property function并使用C#的静态Regex.Replace方法:

<Target Name="Repl">
  <PropertyGroup>
    <Prop>ABCD_1.2.3.112211</Prop>
  </PropertyGroup>
  <Message Text="$([System.Text.RegularExpressions.Regex]::Replace( $(Prop), '_(\d*)\.', '_$1_' ) )" />
</Target>

如果用例更复杂,还有其他选择:

  • 在上面的代码中使用另一个正则表达式
  • MSBuild社区任务有a Regex task,它支持Regex.Replace的Count参数,因此您可以使用简单的正则表达式替换“。”使用“_”并将count设置为1以仅执行第一个实例
  • 使用inline task编写首选实现来替换第一个实例from the answers here