0

正規表現を使用して、別の td 内にネストされているものを除いて、すべての複数行の html td の組み合わせを 1 行に変換する方法を見つけようとしています。

Visual Studio で検索と置換を実行しようとしています (ただし、wildedit などの他のものを使用することもできます)。リターン/タブをすべて削除したい。ただし、問題は、別のテーブルがネストされている場合、親 td に対してこれを実行したくないということです。

たとえば、これを変換したい:

<table class="Top">
    <tr>
        <td class="TopLeft">
            <img src="img/spacer.gif" class="Size">
        </td>
        <td class="TopTile">
            <img src="img/spacer.gif" class="Size">
        </td>
        <td class="TopRight">
            <img src="img/spacer.gif" class="Size">
        </td>
    </tr>
    <tr>
        <td class="LeftTile">
            &nbsp;
        </td>
        <td class="TitleBar">
            Blah Blah Blah
        </td>
        <td class="RightTile">
            &nbsp;
        </td>
    </tr>
    <tr>
        <td class="LeftTile">
            &nbsp;
        </td>
        <td>
            <table cellpadding="2" cellspacing="0" border="0" class="EntryLight">
                <tr>
                    <td class="TopLeft">
                        <img src="img/spacer.gif" class="Size">
                    </td>
                    <td class="TopTile">
                        <img src="img/spacer.gif" class="Size">
                    </td>
                    <td class="TopRight">
                        <img src="img/spacer.gif" class="Size">
                    </td>
                </tr>
                <tr>
                    <td class="LeftTile">
                        &nbsp;
                    </td>
                    <td class="TitleBar">
                        Blah Blah Blah
                    </td>
                    <td class="RightTile">
                        &nbsp;
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>

これに:

<table class="Top">
    <tr>
        <td class="TopLeft"><img src="img/spacer.gif" class="Size"></td>
        <td class="TopTile"><img src="img/spacer.gif" class="Size"></td>
        <td class="TopRight"><img src="img/spacer.gif" class="Size"></td>
    </tr>
    <tr>
        <td class="LeftTile">&nbsp;</td>
        <td class="TitleBar">Blah Blah Blah</td>
        <td class="RightTile">&nbsp;</td>
    </tr>
    <tr>
        <td class="LeftTile">&nbsp;</td>
        <td>
            <table cellpadding="2" cellspacing="0" border="0" class="EntryLight">
                <tr>
                    <td class="TopLeft"><img src="img/spacer.gif" class="Size"></td>
                    <td class="TopTile"><img src="img/spacer.gif" class="Size"></td>
                    <td class="TopRight"><img src="img/spacer.gif" class="Size"></td>
                </tr>
                <tr>
                    <td class="LeftTile">&nbsp;</td>
                    <td class="TitleBar">Blah Blah Blah</td>
                    <td class="RightTile">&nbsp;</td>
                </tr>
            </table>
        </td>
    </tr>
</table>
4

1 に答える 1

1

これは、Visual Studio 2012 がインストールされている場合の例で機能します。これは、.NET 正規表現ライブラリを使用する最初のバージョンです。

検索する

(?<=<td[^>]*>)(?>\s+)(?!<table)|(?<!</table>\s*)\s+(?=</td>)

すべてを何も置き換えません。

説明:

(?<=        # Assert that it's possible to match...
 <td[^>]*>  # an opening <td> tag
)           # before the current position,
(?>\s+)     # then match one or more whitespace characters possessively,
(?!<table)  # but only if the next tag isn't an opening <table> tag.
|           # Or:
(?<!        # (unless we're right after...
 </table>   #  a closing </table> tag
 \s*        #  which may be followed by whitespace)
)           # then
\s+         # Match whitespace
(?=</td>)   # until the next closing </td> tag
于 2012-10-10T21:17:37.817 に答える