替换属性中的登录



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

我想要的是将第一个"."交换为"_"

所以它变成了AB_1_2.3.112211前两个字符可以是更长的 fx ABCD_1.2.3.112211,但它仍应该是输出 ABCD_1_2.3.112211

有没有办法在 msbuild 任务中做到这一点?

如果输入字符串始终如您所显示的那样,即要替换的第一个"."位于下划线后跟数字之后,您可以使用属性函数并使用 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 社区任务有一个正则表达式任务,该任务支持 Regex.Rereplace 的 Count 参数,因此您可以使用简单的正则表达式将 "." 替换为 "_",并将 count 设置为 1 以仅执行第一个实例
  • 使用内联任务在其中编写首选实现来替换此处答案中的第一个实例

最新更新