Regex 正则表达式将所有多行html<;td></td>;除了嵌套在另一行中的组合之外,其他组合都在一行中<;td></td>;

Regex 正则表达式将所有多行html<;td></td>;除了嵌套在另一行中的组合之外,其他组合都在一行中<;td></td>;,regex,regex-negation,Regex,Regex Negation,试图找到一种使用正则表达式将所有多行HTMLTD组合转换为一行的方法,但嵌套在另一个td中的组合除外 我正试图在VisualStudio中进行查找和替换(但我可以使用wildedit等其他工具)来查找跨多行的所有td标记,并将它们全部放在一行上。我想删除所有退货/标签。但问题是,如果在父td中嵌套了另一个表,我就不想这样做 例如,我想将其转换为: <table class="Top"> <tr> <td class="TopLeft">

试图找到一种使用正则表达式将所有多行HTMLTD组合转换为一行的方法,但嵌套在另一个td中的组合除外

我正试图在VisualStudio中进行查找和替换(但我可以使用wildedit等其他工具)来查找跨多行的所有td标记,并将它们全部放在一行上。我想删除所有退货/标签。但问题是,如果在父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>

废话连篇
废话连篇

如果已安装Visual Studio 2012,则此选项适用于您的示例。这是第一个使用.NET正则表达式库的版本:

寻找

(?<=<td[^>]*>)(?>\s+)(?!<table)|(?<!</table>\s*)\s+(?=</td>)
(?)(?>\s+(!)
以零代替一切

说明:

(?<=        # 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

(?“嵌套”和“正则表达式”是相当不兼容的概念。如果你有Visual Studio 2012,你可以用一些肮脏的技巧来管理它,但只有这样,因为这是第一个使用.NET正则表达式库的版本。需要注意的是:我不需要在一个过程中完成所有操作。我可以运行多个过程。我只是尝试用IE p的方式修复一些格式问题处理td标签之间的额外/空白。它们会破坏页面布局。FireFox和Chrome没有问题。但我有一大堆代码没有编写,它们使用嵌套表进行布局,这是我现在遇到的一个问题。=/我还没有Visual Studio 2012。我现在正在运行2010。我得到了相当的支持这样做的结果很好:\n现在,我已经将事情简化为:pass1:\\n:b+{.*}\n:b+\pass2:\\n:b+\以涵盖我正在处理的多行tds的两个最常见的差异。