Powershell替换数组错误中的值

时间:2013-02-11 17:42:32

标签: arrays powershell

我一直在尝试替换数组中的值,我目前正在尝试清理一些值。我试图通过使用数组删除表标签,或者有​​更好的方法来做正则表达式?任何帮助,将不胜感激!感谢。

$array = [regex]::matches($lines, "<td>(.*?)</td>")

    for($x = 0; $x -le $max; $x++){
        $array[$x] = $array[$x].value -replace "<td>", ""
    }

不幸的是,我不断收到以下错误:

    [ : Unable to index into an object of type System.Text.RegularExpressions.MatchCollection.

2 个答案:

答案 0 :(得分:3)

$array = $lines -replace '<td>(.*?)</td>','$1'

答案 1 :(得分:1)

$array = $lines | ? {$_ -match "<td>(.*?)</td>"} | % {$_.Replace("<td>", "").Replace("</td>", "") }

如果您只想替换,而不是仅省略第二次替换。

更好的是,如果你想要同时替换它们:

$array = $lines | ? {$_ -match "<td>(.*?)</td>"} | % {$_ -replace "</?td>", ""}

在回答您的意见时,这可能会更好:

$array = [regex]::matches($lines, "<td>(.*?)</td>") | Select -exp Value | % {$_ -replace "<td>(.*?)</td>", '$1'}

我怀疑有更好的方法可以做到这一点,因为应用正则表达式两次似乎效率低下,但我认为它应该可行。

好的,我想我已经明白了。试试这个:

$array = [regex]::matches($lines, "<td>(.*?)</td>") | % {$_.Result('$1')}