使用Powershell进行字符串替换功能

时间:2017-05-26 07:51:24

标签: string powershell replace

我正在尝试将以下函数从PHP改编为Powershell:

function lgReplace($ origString,$ repArray)

{
    // Transforms an input string containing terms like %1%, %2% and so on by values in array
    for($i=1;$i<count($repArray)+1;$i++)
    {
        $origString=str_replace("%$i%",$repArray[$i],$origString);
    }
    return $origString;
}

在php中,您可以像这样调用此函数:

$source="I like %1% and %2% !";
$new=lgReplace($source, array(1=>"drinking beer",2=>"coding")

换句话说,该函数将在$ source中查找“%1%”,将其更改为“喝啤酒”,然后在$ source中查找“%2%”,将其替换为“编码”,然后返回结果,“我喜欢喝啤酒和编码!”。

我尝试将此功能改编为powershell,但失败了:

function lgReplace($origString,$repArray)
{
    # Transforms an input string containing terms like %1%, %2% and so on by values in array
    for($i=1;$i -lt $repArray.count+1;$i++)
    {
        $origString=$origString -replace "%$i%",$repArray[$i]
    }
    return $origString
}

$source="I like %1% and %2% !"
$terms=@("coding","drinking beer")
$new=lgReplace $source,$terms
$new

$ new显示:

I like %1% and %2% !
coding
drinking beer

我尝试了几种方法来完成这项工作,但无济于事......任何帮助都将不胜感激! 谢谢!

2 个答案:

答案 0 :(得分:2)

尝试像这样的东西(en passant j'adore ton pseudo)

$source="I like {0} and {1} !"
$terms=@("coding","drinking beer")
$new=$source -f $terms
$new

答案 1 :(得分:1)

我会考虑使用哈希表来进行[Key - Value]映射。

$replaceMe = 'I like %1%, %2%, %3%, %4% and %5%'

$keyValueMap = @{
  '%1%' = 'Jägermeister'; 
  '%2%' = 'My wife'; 
  '%3%' = 'PowerShell'; 
  '%4%' = 'the moon';
  '%5%' = 'Hashtable performance'
}

$keyValueMap.GetEnumerator() | % {$replaceMe = $replaceMe -replace $_.key, $_.value }
Write-host $replaceMe 
  

如果我想在PowerShell中比较数据结构,我将无法工作   与数组。

在.NET中,数组是不可变的。每次添加新项目时,系统都会重建阵列并附加新数据。

  

对于每个新项目,您的数组将变得越来越慢。