用于捕获嵌套表的Java正则表达式模式

时间:2015-06-17 16:36:05

标签: java regex jsoup

我有一个html页面,我需要解析它有很多嵌套表。

<table>   <table>   <table > Status </table>  </table>  </table>
<table>   <table>   </table>  </table>

我正在尝试创建一个Java正则表达式模式,仅匹配文本

 <table> Status </table>

我也尝试过像Jsoup这样的html解析器,但是找不到一个干净的解析方法。我一直在打破这个问题,但无法干净地提取这段文字。有关使用Java正则表达式模式/ jsoup的任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

<table\s*>\s*(([^<]|<[^t]|<t[^a]|<ta[^b]|<tab[^l]|<tabl[^e])*?)\s*</table\s*>

您可以获取第一个捕获的组(正则表达式()之间匹配的内容)以获取<table></table>之间的内容(在您的第一个中)示例状态)。

说明:

我们搜索以:

开头的字符串
<table\s*>\s* (\s* is for any number of blank spaces)

包含除序列<table之外的任何内容:

([^<]|<[^t]|<t[^a]|<ta[^b]|<tab[^l]|<tabl[^e])*

结束时:

\s*</table\s*> (\s* is for any number of blank spaces)

我们搜索<table></table>之间序列的最小匹配(以便在第一个</table>之后不匹配)与?之后的匹配*

答案 1 :(得分:0)

这是一个有效的正则表达式:

.*(\s*<table\s*>\s*)+(<table\s*>.*</table\s*>)(\s*</table\s*>\s*)+

内部表及其文本位于第二个匹配组中。

作为小提琴: http://fiddle.re/w73vc6

这当然只有在嵌套方式与您指示的情况下才有效,即外表中没有其他内容,并且表格中没有更多表格以及您需要的文本。