【问题标题】:Extract text between HTML tags (<tr> </tr>)提取 HTML 标记之间的文本 (<tr> </tr>)
【发布时间】:2017-05-06 08:06:12
【问题描述】:

我正在尝试提取字符串中所有 &lt;tr&gt; &lt;/tr&gt; 标记之间的文本并打印出来。

use strict;
use warnings;

my $HTML = '
<tr data_1="15,12,2016" data_2="1">
<td class="cl_1">11111</td>
<td class="cl_2">11111</td>
<td class="cl_3"><strong>11111</strong></td>
<td class="cl_4" colspan="3">11111</td>
</tr>
<tr data_1="16,12,2016" data_2="0">
<td class="cl_1">22222</td>
<td class="cl_2">22222</td>
<td class="cl_3"><strong>22222</strong></td>
<td class="cl_4" colspan="3">22222</td>
</tr>
<tr data_1="15,12,2016" data_2="1">
<td class="cl_1">33333</td>
<td class="cl_2">33333</td>
<td class="cl_3"><strong>33333</strong></td>
<td class="cl_4" colspan="3">33333</td>
</tr>
';

while($HTML =~ /data_2="1">(.*)<\/tr>(\R)/sg) {
    print "$1\n\n";
}

输出应该是:

<td class="cl_1">11111</td>
<td class="cl_2">11111</td>
<td class="cl_3"><strong>11111</strong></td>
<td class="cl_4" colspan="3">11111</td>

<td class="cl_1">33333</td>
<td class="cl_2">33333</td>
<td class="cl_3"><strong>33333</strong></td>
<td class="cl_4" colspan="3">33333</td>

如何做到这一点并从每个 &lt;tr&gt; 标记中提取内容?

【问题讨论】:

    标签: html perl parsing


    【解决方案1】:

    编辑答案以包含需要 &lt;tr&gt;'s 的新限制

    my $HTML = '
    <tr data_1="15,12,2016" data_2="1">
    <td class="cl_1">11111</td>
    <td class="cl_2">11111</td>
    <td class="cl_3"><strong>11111</strong></td>
    <td class="cl_4" colspan="3">11111</td>
    </tr>
    <tr data_1="16,12,2016" data_2="0">
    <td class="cl_1">22222</td>
    <td class="cl_2">22222</td>
    <td class="cl_3"><strong>22222</strong></td>
    <td class="cl_4" colspan="3">22222</td>
    </tr>
    <tr data_1="15,12,2016" data_2="1">
    <td class="cl_1">33333</td>
    <td class="cl_2">33333</td>
    <td class="cl_3"><strong>33333</strong></td>
    <td class="cl_4" colspan="3">33333</td>
    </tr>
    ';
    
    while($HTML =~ /<tr[^>]*data_2=\"1\"[^>]*>(.*?)<\/tr>/msg) {
        print "$1\n\n"; }
    

    输出:

    <td class="cl_1">11111</td>
    <td class="cl_2">11111</td>
    <td class="cl_3"><strong>11111</strong></td>
    <td class="cl_4" colspan="3">11111</td>
    
    <td class="cl_1">33333</td>
    <td class="cl_2">33333</td>
    <td class="cl_3"><strong>33333</strong></td>
    <td class="cl_4" colspan="3">33333</td>
    

    【讨论】:

    • 输出没有错,因为我只需要提取标签中包含data_2="0"的内容
    • 我想我在问题的任何地方都看不到这一点。另外,你的意思是你想要data_2="1"?这似乎更符合您建议的输出
    • 我的错误,对不起。我的意思是 data_2="1"
    • 更改为匹配附加限制
    • 解析-HTML-with-regex 警察在哪里?
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签