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>", "") }

のみを置き換え、 を置き換えたくない場合は、2 番目の Replace を省略します。

さらに良いことに、両方を置き換えたい場合:

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

あなたのコメントに答えて、これはうまくいくかもしれません:

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

正規表現を 2 回適用するのは効率が悪いように見えるので、これを行うためのより良い方法があると思いますが、うまくいくはずです。

わかりました、私はそれを手に入れたと思います。これを試して:

$array = [regex]::matches($lines, "<td>(.*?)</td>") | % {$_.Result('$1')}
于 2013-02-11T17:50:54.070 に答える