Problem mit Regular Expression
Masipulami
- perl
0 Masipulami0 Patrick Andrieu
0 Norbert Kölln0 Siechfred
Hallo zusammen,
ich habe ein Problem mit ein (paar) Regular Expressions und hoffe ihr könnt mir weiterhelfen.
Ich habe als Ausgangsbasis folgenden String:
for200711281234567890123456789.xml
Nun muss ich aus diesem String ein mal das Datum extrahieren (...20071128...) und dann noch mal die 19-stellige Zahl danach.
Momentan hab ich das so gelöst:
my $string = "for200711281234567890123456789.xml";
my $week_curr = $string
my $ts_curr = $string;
$week_curr =~ s/.xml$//;
$week_curr =~ s/([1]{3})//;
$week_curr =~ /([2]{8})/;
$ts_curr =~ s/.xml$//;
$ts_curr =~ s/([3]{3})//;
$ts_curr =~ s/([4]{8})//;
So funktioniert es auch, aber ist es nicht möglich jeweils die 3 Zeilen für die RegEx in eine RegEx zusammen zu fassen?
Sitz da jetzt schon den halben Tag dran und bekomms einfach nicht hin die RegEx zu verschönern.
Hoffe mir da kann da jmd. weiterhelfen!
Viele Grüße,
Masipulami
Hab sogar noch was hässlicheres zusammen gebastelt:
my $week = "18/10/2007";
my $year_for_filename = $week;
my $month_for_filename = $week;
my $day_for_filename = $week;
$year_for_filename =~ /([0-9]{4}$)/;
$month_for_filename =~ /([/][0-9]{2}[/])/;
$month_for_filename =~ s/([1])//;
$month_for_filename =~ s/([/]$)//;
$day_for_filename =~ /([2]{2})/;
my $week_for_filename = $year_for_filename . $month_for_filename . $day_for_filename;
Als Ergebnis will ich halt in $week_for_filename folgenden Inhalt: 20071018
Auch das muss doch schöner gehen oder nicht?
Hab sogar noch was hässlicheres zusammen gebastelt:
Ganz schön umständlich. Kürzer wäre
my $week = "18/10/2007";
my $parts = join '', reverse (split '/', $week);
Siechfred
Auch dir danke!
Ich sag ja selbst, dass es extrem umständlich war. ;-)
Hallo Masipulami!
Ich habe als Ausgangsbasis folgenden String:
for200711281234567890123456789.xmlNun muss ich aus diesem String ein mal das Datum extrahieren (...20071128...) und dann noch mal die 19-stellige Zahl danach.
Momentan hab ich das so gelöst:
Ich würde hier mit substr() arbeiten.
Masipulami
Viele Grüße aus Frankfurt/Main,
Patrick
Vielen Dank für die schnell Hilfe.
Hab vor lauter Wald die Bäume nicht mehr gesehen.
Auf substr() bin ich gar nicht gekommen.
Habs jetzt so gelöst:
my $week_curr = substr($FileApplic, 3, 8);
my $ts_curr = substr($FileApplic, 11, 19);
So ists schön sauber! :-)
Mein zweites Problem hab ich so gelöst:
my $week_for_filename = substr($week, 6, 4) . substr($week, 3, 2). substr($week, 0, 2);
Danke noch mal!
Moinsen!
Wie wäre es mit
my $string = "for200711281234567890123456789.xml";
$string =~ /(\d{8})(\d{19})/;
my $week_curr = $1;
my $ts_curr = $2;
eventuell mit verfeinertem regulären Ausdruck, um bei anderem Inhalt des Strings garantiert die richtigen Bestandteile zu erwischen?
Norbert
Der Ansatz gefällt mir auch gut!
Auch dir danke! Echt klasse wie schnell man hier Hilfe bekommt!
So funktioniert es auch, aber ist es nicht möglich jeweils die 3 Zeilen für die RegEx in eine RegEx zusammen zu fassen?
Klar, wozu gibt es Klammern:
my $string = 'for200711281234567890123456789.xml';
$string =~ /^\w+?(\d{8})(\d+?\.)/;
my $date = $1;
my $whatever = $2;
Das Feintuning überlasse ich Dir :)
Siechfred