2017-06-14 75 views
0

私は初心者のpowershellユーザーです。私はHTMLPowershellはローカルのhtmlタグを抽出します

<head> 
     <title>HTML TABLE</title> 
     </head><body> 
     <table> 
     <colgroup><col/><col/></colgroup> 
     <tr><th>TestcaseName</th><th>Status</th></tr> 
     <tr><td>abcd </td><td>First </td></tr> 
     <tr><td>xyz </td><td>Second </td></tr> 
     <tr><td>pqr </td><td>Third </td></tr> 
     </table> 
     </body> 
</html> 

は、ここで私は

$arr = @() 
$path = "C:\test.html" 
$pattern = '(?i)<tr[^>]*><td[^>]*>(.*)</td><td>' 

Get-Content $path | Foreach {if ([Regex]::IsMatch($_, $pattern)) { 
      $arr += [Regex]::Match($_, $pattern) 
      } 
     } 
$arr | Foreach {$_.Value} 

予想される出力は

abcd 
xyz 
pqr 
あるを試してみましたコードがある。ここで 、タグ間の文字列をPowerShellでHTMLテーブルを解析しようとしています

でも結果は

<tr><td>abcd </td><td> 
<tr><td>xyz </td><td> 
<tr><td>pqr </td><td> 

誰もがタグが出力として得られる理由とこれを回避する方法について言及することはできますか。また、各配列要素にテキストを追加したいとします。例:<a href="\\192.116.1.2\cluster_110">abcd, <a href="\\192.116.1.3\cluster_110">xyzなど、特殊文字が含まれているのと同じことを言います。

答えて

1

これを試してみてください:

(?<=\<td\>)(.*?(?=\</td\>)) 

タグがピックアップされている理由は、タグの内部がピックアップされているのと同じ理由です。あなたが指定しない限り、Regexはそれが一致するすべてを返します。見た目のアサーションを使用してテキストを一致させることはできますが、それをキャプチャから除外することができます。 < =と?は正規表現の上にあります。

http://www.regular-expressions.info/lookaround.html

追加用として、あなたはこれを行うことができます。

$Arr | Foreach {$Nope+ $_ + $ChuckTesta} 
$Begin + $Arr[0] + $End 

が暗黙的に文字列にマッチから、それを変換します、これを行います。あなたは警告されています。私はそれをマッチを保っている間これを行う方法があるとは思わないが、私はおそらく間違っていると仮定します。ファイルが常に有効なXMLになるだろうされている場合は、あなたがそれをXMLにキャストして、以下のような何かを行うことができ

1

[xml] $xml = Get-Content $path 

$xml.SelectNodes("//tr") | 
    Where-Object {$_.ChildNodes.Count -gt 0 -and $_.ChildNodes[0].Name -eq 'td'} | 
    ForEach-Object {$_.ChildNodes[0].InnerText} 

あなたはをForEach-Objectに

内部の結果に好きなあなたを追加することができます
関連する問題