3 Réponses :


17
votes

3 commentaires

Dans ce cas, l'analyse demandée est plutôt simple cependant.


@ETher, il me semble que certaines personnes ontiment se torturer. Je ne sais pas pourquoi.


@Sinan: Ma théorie est qu'il existe un type spécial de courbe d'apprentissage avec des regexes: au début, ils semblent si perdus qu'il n'y a rien qu'ils ne peuvent (ou ne devrait pas) faire. Tout ce qui ressemble à un problème d'analyse par conséquent Doit être résoluble avec des regexes.



0
votes

C'est facile: xxx

voir http://codepad.org/ QZ9D5BRO si vous voulez essayer de l'exécuter.


6 commentaires

Attendez que vous voyiez les bowvotes, je reçois pour vous dire ceci.


@Nick Parce que c'est le genre d'approche qui gardera un gaspillage de plus de temps et d'efforts encore et encore toujours à la recherche de la bonne regex à chaque fois qu'il faut analyser HTML.


Paysing Json avec des expressions régulières est tout aussi difficile que l'analyse HTML, et pourtant l'une des personnes lors d'une discussion précédente, Stackoverflow.com/questions/1598053/... , qui était la plus dogmatique Utilisation de Regex pour analyse HTML, puis a ensuite approuvé une solution à un problème qui impliquait à l'aide de Regexes pour analyser Json: Stackoverflow.com/questions/1636352/... .


Désolé, le lien ci-dessus est légèrement faux: Stackoverflow.com/questions/1636352/...


Eh bien, je ne peux pas parler pour les autres. Je pense que l'utilisation d'expressions régulières était également une perte de temps dans ce cas. Donc, j'ai ajouté une doublure Perl One en utilisant json.pm sur ce fil.


@Kinopiko, il semble que trop peu de gens ne comprennent donc pas la hiérarchie de Chomsky. L'analyse JSON avec des regextes est stupide, même moreso que HTML, puisqu'un analyseur réel est disponible tellement plus simple à utiliser que toute solution de regex à demi-culée pourrait jamais espérer être. Cela démontre la valeur de CS dans l'éducation des programmeurs.



11
votes

Utilisez HTML :: TableXtract . Vraiment.

#!/usr/bin/perl

use strict;
use warnings;

use HTML::TableExtract;
use LWP::Simple;

my $file = 'Table3.htm';
unless ( -e $file ) {
    my $rc = getstore(
        'http://www.ntsb.gov/aviation/Table3.htm',
        $file);
    die "Failed to download document\n" unless $rc == 200;
}

my @headers = qw( Year Fatalities );

my $te = HTML::TableExtract->new(
    headers => \@headers,
    attribs => { id => 'myTable' },
);

$te->parse_file($file);

my ($table) = $te->tables;

print join("\t", @headers), "\n";

for my $row ($te->rows ) {
    print join("\t", @$row), "\n";
}


3 commentaires

Je sais que je suis très tard à cette fête, mais le getStore () est une très bonne touche pour éviter de marteler sur le serveur de quelqu'un. Super exemple de code.


J'ai voté cela parce que vous avez fourni du code de travail, même si j'étais tenté de ne pas être parce que vous ne pouviez pas résister à la conférence à la fin. Savoir quelle documentation à lire n'est pas si facile.


@Suespence Merci pour le UPVOTE, mais les personnes qui continuent de jeter un modèle après une autre sur les documents HTML dont le format n'est pas sous leur contrôle, il faut rappeler de meilleures solutions. Puis-je vous recommander d'ajouter du code de travail à Votre réponse sur le sujet, au lieu de me confier à ne pas conférer aux autres?