I'm trying do write a one line RE to strip sequence numbers off
filenames. The filename can may have:
No sequence numbers
or
Start with a variable number of digits,
Followed by an optional character between a and c
Followed by a compulsory - or _.
The characters - and _ can occur in the filename.
In the code below, the first RE strips the "a" off apple but
by testing for digits first, this can be overcome.
Is there a RE which will remove the need for an if test?
The @ar contains all variations of the filename.
*** CODE ***
#!/usr/bin/perl -w
use 5.14.0;
my @ar = ( "1234_apple.mpg",
"1234-apple.mpg",
"123a_apple_a.mpg",
"1234a-apple-b.mpg",
"apple-a.mpg",
"apple_a.mpg",
"apple.mpg"
);
foreach ( @ar) {
(my $newname = $_) =~ s/(?:^\d+)* # match optional digits
(?:[a-c])* # match an optional alpha a to c.
(?:[-_]*)? # match the compulsory - or _
(.*)/$1/x; # match the file name.
say "$_\t\t$1";
}
# Two step RE.
say "\nTwo step RE\n";
foreach ( @ar ) {
my $oldname = my $newname = $_;
if( $newname =~ s/^\d+(.*)/$1/ ) {
$newname =~ s/(?:[a-c])*(?:[-_])?(.*)/$1/;
}
say "$oldname\t\t$newname";
}
--
Peter Gordon, pete...@netspace.net.au on 01/09/2014
--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/