Perl Regulärer Ausdruck im exakt drei Großbuchstaben zu finden
islandius
- perl
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
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
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
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
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.
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.
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
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/)