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
),在这些情况下,/
正则表达式定界符和 g
、m
等. 标志被视为模式的一部分,因此它永远不会匹配。
此外,当您像这里一样通过替换提取时,您需要确保将整个字符串与您的模式相匹配,并且只捕获要提取的部分。请注意,您可能有超过 1 个捕获组,然后您可以在替换中使用 </code>、<code>
等。
您可以使用
<RegexReplace Input="$(big_number)" Expression=".*\.([^.]*\.[^.]*)$" Replacement="" count="1">
见regex demo。 详情:
.*
- 除换行字符外的任何零个或多个字符,尽可能多
\.
- 一个 .
字符
([^.]*\.[^.]*)
- 第 1 组(</code> 指的是这部分):零个或多个非点字符,一个 <code>.
字符,以及零个或多个点以外的字符
$
- 字符串结尾。
我正在使用 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
),在这些情况下,/
正则表达式定界符和 g
、m
等. 标志被视为模式的一部分,因此它永远不会匹配。
此外,当您像这里一样通过替换提取时,您需要确保将整个字符串与您的模式相匹配,并且只捕获要提取的部分。请注意,您可能有超过 1 个捕获组,然后您可以在替换中使用 </code>、<code>
等。
您可以使用
<RegexReplace Input="$(big_number)" Expression=".*\.([^.]*\.[^.]*)$" Replacement="" count="1">
见regex demo。 详情:
.*
- 除换行字符外的任何零个或多个字符,尽可能多\.
- 一个.
字符([^.]*\.[^.]*)
- 第 1 组(</code> 指的是这部分):零个或多个非点字符,一个 <code>.
字符,以及零个或多个点以外的字符$
- 字符串结尾。