用另一个变量替换字符串中的变量

时间:2014-02-14 02:28:37

标签: string variables powershell replace

我有一个生成的字符串,如下所示:

$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

请帮忙!

2 个答案:

答案 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)