簡體   English   中英

如何僅從HTML表中提取文本並忽略標記?

[英]How can I extract only the text from an HTML table and ignore the tags?

我有HTML表格的文檔。 有些單元格只有數字。 其他單元格有數字和單詞。

有沒有辦法只保留有單詞的單元格的內容,而不是只保留單元格的內容?

有沒有人知道我可以用來做這個的模塊? 或者,無論如何我可以使用正則表達式嗎?

<table>
<tr>
<td>WORDS WORDS WORDS WORDS WORDS WORDS 123</td>
<td> 789</td>
</tr>
<tr>
<td> 123 </td>
<td>WORDS WORDS</td>
</tr>
</table> 

我仍然是perl的新手,所以請原諒我的問題,如果它很簡單。 此外,我已經被警告過使用正則表達式解析HTML文本的潛在問題。

非常感謝!

最后,順便說一下,我將使用一個模塊來殺死所有的HTML代碼。

如您所述,不應使用正則表達式解析HTML。 HTML::Parser這樣的專用解析模塊可以提供幫助:

#!/usr/bin/env perl

use strict;
use warnings;

use HTML::Parser;

my $p = HTML::Parser->new( 'text_h' => [ \&text_handler, 'dtext' ] );
$p->parse_file(\*DATA);

sub text_handler {
    my $text = shift;
    $text =~ s/^\s*|\s*$//g;         # Trim leading and trailing whitespaces
    return if !$text || $text =~ /^[\d\s]+$/;

    print "$text\n";
}

__DATA__
<table>
<tr>
<td>WORDS WORDS WORDS WORDS WORDS WORDS 123</td>
<td> 789 558 </td>
</tr>
<tr>
<td> 123 </td>
<td>WORDS WORDS</td>
</tr>
</table>

輸出:

WORDS WORDS WORDS WORDS WORDS WORDS 123
WORDS WORDS

有幾個模塊可以用來做這個,我自己去HTML::TreeBuilder::XPath

#!/usr/bin/env perl

use v5.12;
use HTML::TreeBuilder::XPath;

my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse_file("data.html");

my @cells = $tree->findnodes('//td');
foreach my $cell (@cells) {
    if ($cell->as_text =~ /^[0-9 ]+$/) {
        $cell->delete_content;
    }
}
print $tree->as_HTML;

使用的XPath引擎應該支持XPath的擴展,允許使用正則表達式(這將允許我們在下面的循環中消除測試)。 我的XPath印章不能讓我現在可以使用它。

#my @cells = $tree->findnodes( '//td[text() =~ /^[0-9 ]$/')->[0];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM