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

    Beiträge:
    1.157
    Zustimmungen:
    5
    MacUser seit:
    16.07.2004
    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

    Beiträge:
    1.800
    Zustimmungen:
    108
    MacUser seit:
    12.01.2004
    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

    Beiträge:
    1.157
    Zustimmungen:
    5
    MacUser seit:
    16.07.2004
    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

    Beiträge:
    1.800
    Zustimmungen:
    108
    MacUser seit:
    12.01.2004
    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

    Beiträge:
    1.157
    Zustimmungen:
    5
    MacUser seit:
    16.07.2004
    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

    Beiträge:
    1.800
    Zustimmungen:
    108
    MacUser seit:
    12.01.2004
    *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

    Beiträge:
    1.157
    Zustimmungen:
    5
    MacUser seit:
    16.07.2004
    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

    Beiträge:
    1.800
    Zustimmungen:
    108
    MacUser seit:
    12.01.2004
    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

    Beiträge:
    1.157
    Zustimmungen:
    5
    MacUser seit:
    16.07.2004
    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

    Beiträge:
    1.157
    Zustimmungen:
    5
    MacUser seit:
    16.07.2004
    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