Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8656[/thread]

regex Problem: regex replace

Leser: 1


<< >> 4 Einträge, 1 Seite
Gast Gast
 2007-01-19 15:20
#73315 #73315
Hi Experten,

ich habe ein - wie ich dachte - einfaches Problem.
ich möchte folgende Zeile von einem directoy parsen:

dr-x------ 0 4294967295 513 0 Sep 11 15:45 Start Menu
^
|
nicht !!


und zwar sollen die ersten 8 beliebig langen Folgen von whitespaces durch ein "/" ersetzt werden, d.h. alle bis auf das space im directory- bzw. filenamen. dafür möchte ich ein regex.Replace verwenden. wenns anders mit regex geht: auch gut!

das Ergebnis soll also wie folgt sein:
dr-x------/0/4294967295/513/0/Sep/11/15:45/Start Menu

soweit bin ich schon gekommen: \s+

wie sage ich nun meiner regex engine, daß dieser Ausdruck nur eine bestimmte Anzahl mal (8x) ersetzt wird ?

bin mir sicher, daß das für Euch kein Problem ist :-)

Tausend Danke im vorraus!

Grüsse,
Thomas
GoodFella
 2007-01-19 17:19
#73316 #73316
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Ich würde den String mit einem Regex in zwei Teile teilen, einer vor und inklusive der Uhrzeit und einer danach; dann so wie du es schon gemacht hast, den ersten Teil substituieren und beide wieder zusammenfügen.\n\n

<!--EDIT|GoodFella|1169220003-->
sesth
 2007-01-19 17:28
#73317 #73317
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Ich würde es so machen:
Code (perl): (dl )
1
2
3
my $s = 'dr-x------    0  4294967295 513    0 Sep 11 15:45 Start Menu';
$s = join('/', split(/ +/, $s, 9));
print "$s\n";
\n\n

<!--EDIT|sesth|1169220570-->
Gruß
Thomas
topeg
 2007-01-19 17:44
#73318 #73318
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Wie man es machen könnte:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

my $str='dr-x------    0  4294967295 513    0 Sep 11 15:45 Start Menu';
print "$str\n";

# Alle Leerzeichen
# zwischen einer Zahl und einem Buchstaben
# oder zwischen zwei Zahlen
# durch ein '/' ersetzen.
(my $str_out=$str)=~s!(?<=[\d-])\s+(?=\w)|(?<=\w)\s+(?=\d)!/!gi;
print "$str_out\n";

# oder (bessere lösung)
# Zerteile den string an den Leerzeichen,
# bis das Array neun elemente enthält
# und füge das Array mit '/' als Trennern wieder zusammen.
$str_out=join('/',split(/\s+/,$str,9));
print "$str_out\n";
<< >> 4 Einträge, 1 Seite



View all threads created 2007-01-19 15:20.