假设我在属性中得到了这个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 以仅执行第一个实例
- 使用内联任务在其中编写首选实现来替换此处答案中的第一个实例