我正在尝试将文件"Introduction _ C# _ Tutorial 1"
重命名为"01.Introduction"
之类的东西。它需要一个-replace
运算符和一个-f
运算符才能对索引号进行零填充。我的代码就像:
$string = "Introduction _ C# _ Tutorial 1"
if ($string -match "^([^_]+)_[^\d]+(\d{1,2})$") {
$Matches[0] -replace "^([^_]+) _[^\d]+(\d{1,2})$", ("{0:d2}. {1}" -f '$2', '$1')
}
但是,输出类似于-f
运算符的缺失:
1. Introduction
如何获得预期的结果?
顺便问一下,有没有一种简单的方法来获得$matches
结果而不先使用-match
语句或将-match
语句组合为单行代码?
答案 0 :(得分:2)
-match已经填充了自动变量$ Matches
> $Matches
Name Value
---- -----
2 1
1 Introduction
0 Introduction _ C# _ Tutorial 1
因此根本不需要-replace并重复RegEx。
但是您需要将数字转换为整数。
$string = "Introduction _ C# _ Tutorial 1"
if ($string -match "^([^_]+)_[^\d]+(\d{1,2})$") {
"{0:D2}. {1}" -f [int]$matches[2],$matches[1]
}
示例输出:
01. Introduction