我有一个生成的字符串,如下所示:
$x = jhgkjh**May**-**JUN**ojklkjh-jkl
我希望用月份的数字替换每月$ x的缩写。所以结果将如下所示:
$x = jhgkjh**05**-**06**ojklkjh-jkl
为此,我创建了2个数组:
$months = "Jan", "Feb", etc...
$Nmonths = "01", "02" , etc...
此循环不起作用:
$i = 0
do {
$x = $x.replace('$months[$i]','$Nmonths[$i]')
$i = $i+1
}
until ("$i" -eq "12")
$x
请帮忙!
答案 0 :(得分:1)
相对于月份字符串的情况,示例数据看起来有点奇怪。无法判断它是否区分大小写,所以这里有两个略有不同的解决方案。 从月份缩写和数字的哈希表开始:
$Months=@{
Jan = '01'
Feb = '02'
Mar = '03'
Apr = '04'
May = '05'
Jun = '06'
Jul = '07'
Aug = '08'
Sep = '09'
Oct = '10'
Nov = '11'
Dec = '12'
}
使用string.replace()
$string = '$x = jhgkjh**May**-**Jun**ojklkjh-jkl'
foreach ($Month in $Months.Keys)
{ $string = $string.Replace($Month,$Months.$Month)}
使用-Replace
运算符
$string = '$x = jhgkjh**May**-**JUN**ojklkjh-jkl'
foreach ($Month in $Months.Keys)
{ $string = $string -Replace $Month,$Months.$Month }
string.replace()
方法更快,但-Replace
运算符在区分大小写方面会更灵活。
无论哪种方式,foreach
循环都应该比foreach-object
答案 1 :(得分:0)
Powershell没有直到构造。试试这个衬垫而不是你的循环。
0..11 | % { $x = $x -replace $months[$_],$Nmonths[$_] }
..
运算符在第一个数字和最后一个数字之间创建一系列整数。
如果您仍想使用传统的流量控制结构,可以使用此
替换until行while($i -lt 12)