Mit Regex aus HTML Quellcode mehrere Zeile extrahieren...

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von pks85, 04.11.2005.

  1. pks85

    pks85 Thread Starter MacUser Mitglied

    MacUser seit:
    16.07.2004
    Beiträge:
    1.157
    Zustimmungen:
    5
    Hallo!
    Folgendes: Ich will aus einer HTML die Zeilen ab einer bestimmten Zahlenkombination bis zu einem <tr> raussuchen, also sowas:
    Code:
    <table>
    <tr>
    <td>12345</td>
    <td>12</td>
    <td>123</td>
    </tr>
    <tr>
    <td>54321</td>
    <td>21</td>
    <td>321</td>
    </tr>
    </table>
    
    und rauskommen soll das:
    Code:
    <td>12345</td>
    <td>12</td>
    <td>123</td>
    </tr>
    
    Hab es so probiert:
    Code:
    ^.*12345.*$(^.*$)+^.*tr.*$
    das funktioniert aber irgendwie nicht :)

    Das da:
    Code:
    ^.*12345.*$ 
    funktioniert, gibt aber eben nur die Zeile aus in der "12345" steht.

    Bin was regex angeht sehr unerfahren, daher bitte ich um Mithilfe. :)

    Danke schonmal!
     
  2. TerminalX

    TerminalX MacUser Mitglied

    MacUser seit:
    12.01.2004
    Beiträge:
    1.794
    Zustimmungen:
    108
    versuch es mal mit :
    /<tr>([.*[^(<tr>)]])<\/tr>/

    weiß jetzt aber nicht ob das geht, musst du ausprobieren.
     
    Zuletzt bearbeitet: 04.11.2005
  3. pks85

    pks85 Thread Starter MacUser Mitglied

    MacUser seit:
    16.07.2004
    Beiträge:
    1.157
    Zustimmungen:
    5
    Danke, aber funktioniert nicht - das regex soll ja eigtl. auch nur die Zeilen ab der Zahlenkombination 12345 bis zum nächsten </tr> suchen.
     
  4. TerminalX

    TerminalX MacUser Mitglied

    MacUser seit:
    12.01.2004
    Beiträge:
    1.794
    Zustimmungen:
    108
    Achso, und was ist hiermit:

    /<td>12345<td>((<td>[\w\s]*<td>)*)<\/tr>/

    Natürlich können dann in den <td> s keine Sonderzeichen vorkommen.
     
  5. pks85

    pks85 Thread Starter MacUser Mitglied

    MacUser seit:
    16.07.2004
    Beiträge:
    1.157
    Zustimmungen:
    5
    Hm, damit bekomm ich auch keine Ergebnisse. Kann es sein, dass man da noch was einbauen muss, damit der auch neue Zeilen und Whitespaces beachtet?
    die Datei sieht konkret so aus:
    Code:
    <tr>
        <td>12345</td>
        <td>12</td>
        <td>bla</td>
    </tr>
    
     
  6. TerminalX

    TerminalX MacUser Mitglied

    MacUser seit:
    12.01.2004
    Beiträge:
    1.794
    Zustimmungen:
    108
    *hustel* Ja eigendlich schon. :D
    /<td>12345<td>\s?((<td>[\w\s]*<td>\s?)*)<\/tr>/

    Hab einfach \s? hinter die <td> s hinzugefügt.
    \s = [\f\t\n\r ]
    ? = optional
     
  7. pks85

    pks85 Thread Starter MacUser Mitglied

    MacUser seit:
    16.07.2004
    Beiträge:
    1.157
    Zustimmungen:
    5
    Funktioniert immer noch nicht :)
    Kann leider nix dazu sagen, da ich dein regex garnicht verstehe :D (wie gesagt bin Anfänger!)

    Aber ich probier das halt hier: http://regxlib.com/RETester.aspx
    aus, und er sagt "No Matches" wenn das:
    Code:
    <tr>
        <td>12345</td>
        <td>12</td>
        <td>bla</td>
    </tr>
    Source ist und das:
    Code:
    /<td>12345<td>\s?((<td>[\w\s]*<td>\s?)*)<\/tr>/
    das Regex.

    Dieses Zeug verwirrt mich mehr und mehr... :>
     
  8. TerminalX

    TerminalX MacUser Mitglied

    MacUser seit:
    12.01.2004
    Beiträge:
    1.794
    Zustimmungen:
    108
    Ok jetzt reichts. Vorhin hab ich meine Hausaufgaben geschrieben. Jetzt hab ich extra ein Perl Skript geschrieben dafür:
    Code:
    #! /usr/bin/perl
    use strict;
    
    open DATEI, "./test_datei" or die "Coudn't open the test_datei: $!";
    my @datei = <DATEI>;
    close DATEI;
    
    #print @datei;
    
    my $datei;
    foreach (@datei) {
        $datei .= $_;
    }
    
    if($datei =~/(<td>12345<\/td>\s?((<td>[\w\s]*<\/td>\s?)*)<\/tr>)/) {
        print "$1\n";
    } else {
        print "\nNo Match\n";
    }
    in der Datei "test_datei" befindet sich folgendes:
    Ergebnis:

    So und jetzt geh ich eine Runde Basketball spielen. :D
     
    Zuletzt bearbeitet: 04.11.2005
  9. pks85

    pks85 Thread Starter MacUser Mitglied

    MacUser seit:
    16.07.2004
    Beiträge:
    1.157
    Zustimmungen:
    5
    Gibts ja nicht - funktioniert! ;D

    Vielen Dank für deine Mühe!!!

    Gruß,pks

    p.s.: viel Spaß beim bb! :)
     
  10. pks85

    pks85 Thread Starter MacUser Mitglied

    MacUser seit:
    16.07.2004
    Beiträge:
    1.157
    Zustimmungen:
    5
    So, jetzt wollte ich das eigtl. in python machen - exakt der gleiche regex bringt da keine Ergebnisse... :'(
    Code:
    #!/usr/bin/python
    import re
    
    f = open ("./test_datei", "r").readlines()
    
    res = re.compile('/(<td>12345<\/td>\s?((<td>[\w\s]*<\/td>\s?)*)<\/tr>)/')
    
    for line in f:
    	if res.search(line) is not None:
    		print line
     
    Zuletzt bearbeitet: 04.11.2005
Die Seite wird geladen...

Diese Seite empfehlen