MSBUILD RegexReplace 获取所有文本,直到倒数第二个点

MSBUILD RegexReplace get all text till 2nd last dot from end

我正在使用 ToolsVersion="3.5"。

我想匹配从字符串末尾到倒数第二个点 (.)。

例如给定值 123.456.78.910.abcdefgh 我只想得到 910.abcdefgh

我试过

<RegexReplace Input="$(big_number)" Expression="/(\w+\.\w+)$/gm" Replacement="" count="1">
        <Output ItemName ="big_number_tail" TaskParameter="Output"/>
</RegexReplace>

但它只返回整个字符串。 知道哪里出了问题吗?

首先,不要在文本属性中使用正则表达式。当您通过字符串而不是代码定义正则表达式时,通常不使用正则表达式文字符号(如 /.../gm),在这些情况下,/ 正则表达式定界符和 gm 等. 标志被视为模式的一部分,因此它永远不会匹配。

此外,当您像这里一样通过替换提取时,您需要确保将整个字符串与您的模式相匹配,并且只捕获要提取的部分。请注意,您可能有超过 1 个捕获组,然后您可以在替换中使用 </code>、<code> 等。

您可以使用

<RegexReplace Input="$(big_number)" Expression=".*\.([^.]*\.[^.]*)$" Replacement="" count="1">

regex demo详情:

  • .* - 除换行字符外的任何零个或多个字符,尽可能多
  • \. - 一个 . 字符
  • ([^.]*\.[^.]*) - 第 1 组(</code> 指的是这部分):零个或多个非点字符,一个 <code>. 字符,以及零个或多个点以外的字符
  • $ - 字符串结尾。