Msbuild 替换属性中的符号
假设我在一个酒店里得到了这个AB_1.2.3.112211 我想把第一个“.”换成一个“uuu” 所以它变成了AB_1_2.3.112211 前两个字符的长度可能更长,但仍应为输出Msbuild 替换属性中的符号,msbuild,msbuild-task,msbuild-4.0,msbuildextensionpack,Msbuild,Msbuild Task,Msbuild 4.0,Msbuildextensionpack,假设我在一个酒店里得到了这个AB_1.2.3.112211 我想把第一个“.”换成一个“uuu” 所以它变成了AB_1_2.3.112211 前两个字符的长度可能更长,但仍应为输出 在msbuild任务中是否有这样做的方法?如果输入字符串始终与您显示的相同,即要替换的第一个“.”位于下划线后面,后跟一个数字,则可以使用a和C#的静态正则表达式。替换方法: <Target Name="Repl"> <PropertyGroup> <Prop>ABCD
在msbuild任务中是否有这样做的方法?如果输入字符串始终与您显示的相同,即要替换的第一个“.”位于下划线后面,后跟一个数字,则可以使用a和C#的静态正则表达式。替换方法:
<Target Name="Repl">
<PropertyGroup>
<Prop>ABCD_1.2.3.112211</Prop>
</PropertyGroup>
<Message Text="$([System.Text.RegularExpressions.Regex]::Replace( $(Prop), '_(\d*)\.', '_$1_' ) )" />
</Target>
ABCD_1.2.3.112211
如果用例更复杂,还有其他选项:
- 在上面的代码中使用另一个正则表达式
- MSBuild Community tasks具有支持Regex.Replace的Count参数的,因此您可以使用简单的Regex将“.”替换为“\ux”,并将Count设置为1以仅执行第一个实例
- 使用编写首选实现的方法替换第一个实例
<Target Name="Repl">
<PropertyGroup>
<Prop>ABCD_1.2.3.112211</Prop>
</PropertyGroup>
<Message Text="$([System.Text.RegularExpressions.Regex]::Replace( $(Prop), '_(\d*)\.', '_$1_' ) )" />
</Target>
ABCD_1.2.3.112211
如果用例更复杂,还有其他选项:
- 在上面的代码中使用另一个正则表达式
- MSBuild Community tasks具有支持Regex.Replace的Count参数的,因此您可以使用简单的Regex将“.”替换为“\ux”,并将Count设置为1以仅执行第一个实例
- 使用编写首选实现的方法替换第一个实例
Regex.Replace
是.NET中的一种方法;语法完全是“MSBuild语言”。BCL文档显示了各种语言中使用的语法,但不幸的是,没有显示MSBuild的语法。“property functions”上提供的链接提供了一般的MSBuild语法。这是一个很好的信息,但与C#无关Regex.Replace
是.NET中的一种方法;语法完全是“MSBuild语言”。BCL文档显示了各种语言中使用的语法,但不幸的是,没有显示MSBuild的语法。“属性函数”上提供的链接提供了一般的MSBuild语法。