1

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コードを強制終了します。

4

2 に答える 2

2

すでに述べたように、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
于 2012-08-17T06:16:36.510 に答える
2

これを行うために使用できるモジュールがいくつかあります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];
于 2012-08-17T06:27:55.430 に答える