islandius: Perl Regulärer Ausdruck im exakt drei Großbuchstaben zu finden

Hi zusammen,

Ich habe einen Suchalgorithmus in Perl, der mir den nachfolgenden HTML Code ausliest:

Ort:</td><td class="desc">Hauptbahnhof (HBF) (<a href=

Er gibt dann aus:
Hauptbahnhof (HBF)

Ich würde jetzt gerne noch die drei Buchstaben in der Klammer gesondert auslesen, d.h. es soll HBF noch extra gesucht werden.

Welchen regulären Ausdruck verwende ich dafür?
/[A-Z]/ (da eine Umlaute drin sind)
Reicht 1x [A-Z]?
Oder besser:
/(.{3})/
Oder gibt's da noch etwas besseres?

Es sind IMMER Großbuchstaben, es sind IMMER drei, sie sind IMMER in runden Klammern und es sind nur ASCII Werte dabei...
Kurz: eine Eventualitäten..

Wär super, wenn jemand hierfür einen Tipp hat. Danke

Grüße

islandius

  1. Hallo islandius.

    Ich würde jetzt gerne noch die drei Buchstaben in der Klammer gesondert auslesen, d.h. es soll HBF noch extra gesucht werden.

    Welchen regulären Ausdruck verwende ich dafür?
    /[A-Z]/ (da eine Umlaute drin sind)
    Reicht 1x [A-Z]?

    Damit matcht du auf genau einen Großbuchstaben.

    Oder besser:
    /(.{3})/

    Damit auf jedes x-beliebige Zeichen, genau drei Mal.

    Oder gibt's da noch etwas besseres?

    Eine Kombination?

    /\(([A-Z]{3})\)/

    Mit den maskierten Klammern sorgst du dafür, dass wirklich nur "(FOO)" matcht.

    Einen schönen Mittwoch noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Hallo Ashura,

      Erstmal vielen lieben Dank dafür... es scheint auch zu funktionieren, allerdings hat mein Script da eine Macke...
      Daher jetzt eine andere Frage:

      Ich habe ohnehin schon "Hauptbahnhof (HBF)" in einem String. Vom Prinzip her will ich ja nichts neues, sondern könnte es alles aus der Variable nehmen. Wie streiche ich mit regulären Ausdrücken alles ausser eben jene drei Buchstaben?

      Tut mir leid, dass ich bei regulären Ausdrücken etwas schwach bin...hab jedoch noch nicht soviel damit zu tun gehabt.

      Hab vielen lieben Dank

      islandius

      1. gudn tach!

        Tut mir leid, dass ich bei regulären Ausdrücken etwas schwach bin...hab jedoch noch nicht soviel damit zu tun gehabt.

        manual-tipps:
        perldoc perlrequick
        perldoc perlretut
        perldoc perlre

        prost
        seth

      2. Hi,

        Wie streiche ich mit regulären Ausdrücken alles ausser eben jene drei Buchstaben?

        zB so..

          
        my $text = 'Hauptbahnhof (HBF)';  
          
        $text =~ s/\w+\s+?\(([A-Z]{3})\)/$1/;  
          
        print $text;  
        
        

        ..aber wie ich bereits sagte, warum zuerst etwas herauspicken um aus dem Ergebnis wieder etwas herauszupicken, wenn es doch effizienter und sinnvoller ist, gleich beide Matches zuzuweisen?

        Markus.

        --
        http://www.apostrophitis.at
        Maschiene währe Standart Gallerie vorraus Packete Objeckte tollerant vieleicht Strucktur
  2. Hallo,

    Ich würde jetzt gerne noch die drei Buchstaben in der Klammer gesondert auslesen, d.h. es soll HBF noch extra gesucht werden.

    suche doch nach allem gleichzeitig, zB:

      
    $text =~ /.+>(\w+?)\s+?\(([A-Z]{3})\).+/g;  
    my($bahnhof, $initialen) = ($1, $2);  
    
    

    Markus.

    --
    http://www.apostrophitis.at
    Maschiene währe Standart Gallerie vorraus Packete Objeckte tollerant vieleicht Strucktur
    1. suche doch nach allem gleichzeitig, zB:

      $text =~ /.+>(\w+?)\s+?(([A-Z]{3})).+/g;
      my($bahnhof, $initialen) = ($1, $2);

        
      Hatte an diese Alternative noch gar nicht gedacht... Werd's mal versuchen. Vielen lieben Dank.  
        
      islandius
      
    2. Hell-O!

      $text =~ /.+>(\w+?)\s+?(([A-Z]{3})).+/g;
      my($bahnhof, $initialen) = ($1, $2);

        
      Das gibt's auch als Einzeiler:  
        
      `my ($name, $abk) = $string =~ /^(\w+?)\s+?\(([A-Z]{3})\)$/;`{:.language-Perl}  
        
      Nur der Vollständigkeit halber :-)  
        
      Siechfred
      
      -- 
      Hier könnte Ihre Werbung stehen.  
      [Schöne Wörter, Teil 2](http://siechfred.kennt-wayne.de/2006/5/schoene_woerter_2) || [Die neue 1%-Regelung](http://www.steuerwerkstatt.de/blog/)