Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^2: Regexp substitution on variable-length ranges with embedded code?

by Polyglot (Chaplain)
on May 26, 2021 at 20:25 UTC ( [id://11133089]=note: print w/replies, xml ) Need Help??


in reply to Re: Regexp substitution on variable-length ranges with embedded code?
in thread Regexp substitution on variable-length ranges with embedded code?

This also works very nicely. Very nice one-liner. Now I'm wondering if the last two could be joined with a comma in the same operation to yield:

43:1:1-6; 27:3:7-9; 65:1:4,18

I hadn't really considered such possible, but you experts make me think I may have underestimated.

Blessings,

~Polyglot~

  • Comment on Re^2: Regexp substitution on variable-length ranges with embedded code?
  • Download Code

Replies are listed 'Best First'.
Re^3: Regexp substitution on variable-length ranges with embedded code?
by tybalt89 (Monsignor) on May 26, 2021 at 21:25 UTC

    Simple with a second line. You don't really need it in one line, do you?

    #!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11133054 use warnings; $_ = '43:1:1; 43:1:2; 43:1:3; 43:1:4; 43:1:5; 43:1:6; 43:1:9; 43:1:10; + 27:3:2; 27:3:7; 27:3:8; 27:3:9; 65:1:4; 65:1:18; 65:1:28'; print "$_\n"; s/\b(\d+:\d+:)(\d+)\K(; \1((??{$+ + 1}))\b)+/-$+/g; 1 while s/\b(\d+:\d+:)[\d,-]+\K; \1([\d,-]+)/,$2/; print "$_\n";

    Outputs:

    43:1:1; 43:1:2; 43:1:3; 43:1:4; 43:1:5; 43:1:6; 43:1:9; 43:1:10; 27:3: +2; 27:3:7; 27:3:8; 27:3:9; 65:1:4; 65:1:18; 65:1:28 43:1:1-6,9-10; 27:3:2,7-9; 65:1:4,18,28
Re^3: Regexp substitution on variable-length ranges with embedded code?
by The Perlman (Scribe) on May 27, 2021 at 11:27 UTC
    One regex for both would be very complicated. But two regexes almost trivial now.

    First regex should transform in comma separated list: 65:1:2,3,4,18

    Second regex should apply shown technique to condense lists to ranges: 65:1:2-4,18

    - Ron

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11133089]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2024-04-19 23:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found