Msbuild 替换属性中的符号

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

假设我在一个酒店里得到了这个AB_1.2.3.112211

我想把第一个“.”换成一个“uuu”

所以它变成了AB_1_2.3.112211 前两个字符的长度可能更长,但仍应为输出


在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以仅执行第一个实例
  • 使用编写首选实现的方法替换第一个实例

如果输入字符串始终与您显示的相同,即,要替换的第一个“.”位于下划线之后,后跟一个数字,则可以使用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以仅执行第一个实例
  • 使用编写首选实现的方法替换第一个实例

信息不错,但与C无关
Regex.Replace
是.NET中的一种方法;语法完全是“MSBuild语言”。BCL文档显示了各种语言中使用的语法,但不幸的是,没有显示MSBuild的语法。“property functions”上提供的链接提供了一般的MSBuild语法。这是一个很好的信息,但与C#无关
Regex.Replace
是.NET中的一种方法;语法完全是“MSBuild语言”。BCL文档显示了各种语言中使用的语法,但不幸的是,没有显示MSBuild的语法。“属性函数”上提供的链接提供了一般的MSBuild语法。