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

jhiyze9q  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(90)

我想使用**Regular Expression**(与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>

/已编辑

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

已编辑:

下面是我想使用RegEx在上面的表中选择的内容:
<td1 to </tr1>-或从<td2 to </tr2>-或从<td3 to </tr3>

/已编辑

格式(缩进和新行必须保留),我的意思是我不能把,例如
</tr>位于单元格的关闭标记(</td>)前面。
Indentation is only **space character**.
谢谢你的帮助...

mrfwxfqh

mrfwxfqh1#

你可以用regex做的最好的事情是:

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

但这有点难看,资源密集型,并打破当你有嵌套表。一个更好的方法确实是为您使用的任何编程语言使用XML或HTML解析器。
如果你想从每一行中选择最后一个单元格,就像你更新的问题所建议的那样,省去负向前看,如下所示:

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

示例如下:http://refiddle.co/gt2

相关问题