【问题标题】:substitute a variable in a string with another variable用另一个变量替换字符串中的变量
【发布时间】:2014-03-13 05:52:29
【问题描述】:

我有一个这样的生成字符串:

$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

请帮忙!

【问题讨论】:

    标签: string variables powershell replace


    【解决方案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

    【讨论】:

      【解决方案2】:

      Powershell 没有 do until 构造。试试这个衬垫而不是你的循环。

      0..11 | % { $x = $x -replace $months[$_],$Nmonths[$_] }
      

      .. 运算符在第一个数字和最后一个数字之间创建一个整数范围。

      如果你仍然想使用传统的流控制结构,你可以用这个替换 until 行

      while($i -lt 12)
      

      【讨论】:

      • Powershell 确实有一个 do until 构造。试试这个: $i=0;做 {$i;$i++} 直到 ($i -eq 10)
      • 哇,我脸上的鸡蛋。真不敢相信我已经错过了这么长时间。
      • 与While()基本相同,但在循环结束时进行测试,所以总是至少循环一次。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2011-09-29
      • 2013-02-16
      • 2015-10-03
      相关资源
      最近更新 更多