1

HTML 形式で電子メールで送信するオブジェクトの配列を生成するスクリプトがあります。その部分はうまく機能します。HTML 文字列を変更して、特定の行のフォントの色を変更しようとしています。

HTML 文字列の一部は次のようになります (2 行のみ):

<tr>
    <td>ABL - Branch5206 Daily OD Report</td>
    <td>'\\CTB052\Shared_Files\FIS-BIC Reporting\Report Output Files\ABL\Operations\Daily\ABL - Branch5206 Daily OD Report.pdf'</td>
    <td>13124</td>
    <td>4/23/2013 8:05:34 AM</td>
    <td>29134</td>
    <td>0</td>
    <td>Delivered</td>
</tr>

<tr>
    <td>ABL - Branch5206 Daily OD Report</td>
    <td>'\\CTB052\Shared_Files\FIS-BIC Reporting\Report Output Files\ABL\Operations\Daily\ABL - Branch5206 Daily OD Report.xls'</td>
    <td>15716</td>
    <td>4/23/2013 8:05:34 AM</td>
    <td>29134</td>
    <td>0</td>
    <td>Delivered</td>
</tr>

行が「配信済み」で終わる行の最初と最後にフォントの色を追加する正規表現を試しました。 $email = [regex]::Replace($email, "<tr><td>(.*?)Delivered</td></tr>", '<tr><font color = green><td>$1Delivered</td></font></tr>')

これは機能しませんでした (そのような行全体にフォントの色を設定できるかどうかはわかりません)。

これを簡単/効率的に行う方法についてのアイデアはありますか? いくつかの異なるステータス(配信済みなど)でそれを行う必要があります

4

1 に答える 1

1

免責事項: HTMLは正規表現パーサーでは解析できません。正規表現は、この問題に対する一般的な解決策を提供しません。ただし、 HTML 構造がよく知られており、他の<tr></tr>要素がない場合は、次の方法でうまくいく可能性があります。ただし、HTML が既に生成されるまで待つのではなく、HTML 生成を変更してこれを行うことができない理由はありますか?

このコマンドを試してください:

PS > $email = $email -replace '(?s)<tr>(.*?)<td>Delivered</td>(.*?)</tr>','<tr style="color: #FF0000">$1<td>Delivered</td>$2</tr>'

最初の文字列はパターンです。(?s)パーサーに.改行の受け入れを許可するように指示します。これは「単線」モードと呼ばれます。次に<tr>、string を含む要素を取得します<td>Delivered</td><tr>2 つのキャプチャ グループは、文字列の周囲の要素内の他のすべてを取得し<td>Delivered</td>ます。sに続く疑問符に注意してください**それ自体は貪欲で、可能な限り多くのテキストに一致します。*?可能な限り短いテキストに一致します。ここで使用*すると、文字列全体が 1 つの一致として扱われ、最初の<tr>.

2 番目の文字列は置換です。追加されたスタイル属性を使用して、<tr>要素とそのコンテンツを所定の位置に戻します。すべて後方参照はありません。

もう 1 つの注意点は、引用です。とにかく一重引用符を使用する傾向がありますが、この場合、置換文字列に二重引用符が含まれている可能性があります。したがって、単一引用符はおそらく行く方法です。

さまざまなステータスでこれを行う方法については、正規表現は実際にはそのような条件付きコンテンツ用に設計されていません。ドライバーをドリルとして使おうとしているようなものです。いくつかの置換をハードコーディングするか、ステータス/色のペアをループして、パターンを構築し、それらから文字列を置換できます。本格的な HTML パーサーは、.NET 用のパーサーを見つけることができれば、より効率的です。有効な XML であることを保証できる場合は、XML パーサーで回避しようとするかもしれません。または、最初の質問に戻りますが、HTML 生成を変更することもできます。ただし、電子メールの数が少ない場合、これは対処する価値のあるボトルネックではない可能性があります。費やされる開発時間もコストがかかります。十分に速いかどうかを確認し、そうでない場合は別のルートを試してください。

当然のことですが、@FrankieTheKneeMan から HTML スタイル属性を取得しました。

于 2013-04-24T03:04:40.620 に答える