通过正则表达式查找表的最后一个单元格

时间:2013-08-28 16:21:31

标签: regex

我想使用 正则表达式 (与 pcre 兼容)来选择表格 XML或HTML文件中的单元格。
该单元格在几行中包含 其他元素和相关属性和值。这个单元应该在最后一列。

由于某些原因,我不能也不想使用“. matches newline”选项。

例如在此代码中:
编辑:

<table colcount="4">
<tr>
    <td colspan="2">
        <para><text> Mike</text></para>
    </td>
    <td>
        <tab />
    </td>
    <td1>
        <para><text>Jack</text></para>
        <para><text>Sarah</text></para>
    </td>
</tr1>
<tr>
    <td>
        <para><text>Bob</text></para>
        <para><text>Rita</text></para>
    </td>
    <td2 colspan="3" with>
        <para><text>Helen</text></para>
    </td>
</tr2>
<tr>
    <td style="with:445px;">
        <para><text>Sam</text></para>
    </td>
    <td>
        <para><text>Emma</text></para>
        <para><text>George</text></para>
    </td>
    <td>
    </td>
    <td3 colspan="">
        <tab />
    </td>
</tr3>
</table>

/ EDITED

我想查找并选择整个最后一个单元格及其开始和结束标记(<td</td>
和相应行(</tr>)的结束标记,即:

编辑:

以下是使用RegEx在上表中选择的内容:

来自<td1 to </tr1> - 或来自<td2 to </tr2> - 或来自<td3 to </tr3>

/ EDITED

格式(缩进和新行必须保留),我的意思是我不能把,例如左 </tr>位于单元格的结束标记前面(</td>缩进只是空格字符

感谢您的帮助......

1 个答案:

答案 0 :(得分:0)

你能用正则表达式做的最好的事情是:

<td(([^<]|<(?!\/td>))*)<\/td>\s*<\/tr>(?!(.|\r|\n)*<tr)

但是当你有嵌套表时,这有点丑陋,资源密集并且会中断。对于您正在使用的编程语言,确实使用XML或HTML解析器的路径更好。

如果您想从每一行中选择最后一个单元格,正如您更新的问题所示,请忽略这样的否定前瞻:

<td(([^<]|<(?!\/td>))*)<\/td>\s*<\/tr>

这里的工作示例:http://refiddle.com/gt2