如何在单个正则表达式中提取父项和嵌套项?

时间:2016-08-08 12:11:25

标签: regex

我想使用正则表达式来匹配以下html表:

<tbody class=\"DocTableBody \">
  <tr data-fastRow=\"1\" class=\"DataRow TDRE\">
    <td  id=\"g-f-1\" class=\"TDC  FieldDisabled Field TCLeft   CellText  g-f\"   >
      <div class=\"DTC\">
        <label id=\"c_g-f-1\" class=\"DCC\" >01-Apr-2015</label>
      </div>
    </td>
    <td  id=\"g-g-1\" class=\"TDC  FieldDisabled Field TCLeft   CellTextHtml  g-g\"   >
      <div class=\"DTC\">
        <label id=\"c_g-g-1\" class=\"DCC\" >ACTIVE</label>
      </div>
    </td>
  </tr>
  <tr data-fastRow=\"2\" class=\"DataRow TDRO\">
    <td  id=\"g-f-2\" class=\"TDC  FieldDisabled Field TCLeft   CellText  g-f\"   >
      <div class=\"DTC\">
        <label id=\"c_g-f-2\" class=\"DCC\" >01-Apr-2015</label>
      </div>
    </td>
    <td  id=\"g-g-2\" class=\"TDC  FieldDisabled Field TCLeft   CellTextHtml  g-g\"   >
      <div class=\"DTC\">
        <label id=\"c_g-g-2\" class=\"DCC\" >ACTIVE</label>
      </div>
    </td>
  </tr>
</tbody>

我希望提取以下值:

"1"
  01-Apr-2015
  ACTIVE
"2"
  01-Apr-2015
  ACTIVE

我尝试了以下内容来提取data-fastRow中的值:

(?sUi)<tr data-fastRow=\\"(\d+)\\".+>.*<\/tr>

但是我无法在单个正则表达式中提取<label.+>(.*)</label>中的嵌套项。

是否可以在单个正则表达式中提取父项和嵌套项?

1 个答案:

答案 0 :(得分:0)

用正则表达式解析HTML是一个非常糟糕的主意。 每个语言都有自己的库来解析HTML。 例如,在Python中,您有BeautifulSoup

使用这样的库要好得多。

通常,这些库具有类似jQuery-Selector的界面(或类似的东西),它允许您通过非常简单的查询来查找数据。