1

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

$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.
4

2 回答 2

3
$array = $lines -replace '<td>(.*?)</td>','$1'
于 2013-02-11T18:26:06.323 回答
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')}
于 2013-02-11T17:50:54.070 回答