在下面的例子中,我希望得到;[rr] [Delete]
的输出,但实际上我得到的是getting Sendinput, {F3}
:
$Name = "Sendinput, {F3} ;[rr] [Delete]"
$name -replace "(;\[rr\].*)", "$1"
Sendinput, {F3}
这不是一个捕获组吗??我很困惑,我会做错什么呢?
在下面的例子中,我希望得到;[rr] [Delete]
的输出,但实际上我得到的是getting Sendinput, {F3}
:
$Name = "Sendinput, {F3} ;[rr] [Delete]"
$name -replace "(;\[rr\].*)", "$1"
Sendinput, {F3}
这不是一个捕获组吗??我很困惑,我会做错什么呢?
1条答案
按热度按时间bfnvny8b1#
问题是双引号而不是单引号,PowerShell将
$1
解释为变量而不是捕获组(变量在双引号字符串中展开),由于变量未定义,因此它实际上将正则表达式匹配替换为null。但是,您还希望将所有内容替换为捕获组1,因此您的正则表达式应该如下所示:
有关详细信息,请参阅https://regex101.com/r/ikQzhc/1。
值得注意的是,您可以使用
-match
或Regex.Match
来执行此操作: