in reply to Re: Extraction of numbers in an string
in thread Extraction of numbers in an string

This has a problem with the multi-digit requirement t-rex revealed to us here, and unfortunately there's no simple way to fix it by the use of  \d+ or any other trick I can think of:

c:\@Work\Perl\monks>perl -wMstrict -le "printf qq{$_ } for grep {/\d/} split '', q(<1,22>:<5,7>:<333,0>); " 1 2 2 5 7 3 3 3 0

Update: Actually, if one were married to split, it could be made to work with a rather more complex regex:

c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my @d = grep length, split qr{ >:< | [<,>] }xms, q(<1,22>:<5,7>:<333, +0>); dd @d; " (1, 22, 5, 7, 333, 0)
But I wouldn't recommend it.


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^3: Extraction of numbers in an string
by tybalt89 (Monsignor) on Nov 25, 2016 at 19:54 UTC

    Still fairly simple with split:

    #!/usr/bin/perl -l # http://perlmonks.org/?node_id=1176478 use strict; use warnings; my $string = '<1,22>:<5,7>:<333,0>'; my @x = grep /\d/, split /\D+/, $string; print for @x;

      Even simpler: no need for grep.

      my @x = split /\D+/, $string;

      Update: tybalt89 and AnomalousMonk are both right, of course. My bad :(

        Nope

        #!/usr/bin/perl -l # http://perlmonks.org/?node_id=1176478 use strict; use warnings; my $string = '<1,22>:<5,7>:<333,0>'; my @x = split /\D+/, $string; print /\d/ ? $_ : 'empty string' for @x;

        prints

        empty string 1 22 5 7 333 0

        But without some sort of grep step, that produces a spurious leading empty string in the output list:

        c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my $string = '<1,22>:<5,7>:<333,0>'; my @x = split /\D+/, $string; dd \@x; " ["", 1, 22, 5, 7, 333, 0]


        Give a man a fish:  <%-{-{-{-<

      Aha! A short, sweet split pattern++. I never thought of that one. But I still prefer  m{ \d+ }xmsg extraction.


      Give a man a fish:  <%-{-{-{-<

Re^3: Extraction of numbers in an string
by karlgoethebier (Abbot) on Nov 26, 2016 at 10:08 UTC
    "...a problem with the multi-digit requirement"

    Yes. In the moment i clicked on "create" i noticed it. Believe me ;-)

    Best regards, Karl

    «The Crux of the Biscuit is the Apostrophe»