Thread '3,6-10,16,23' in (3,6,7,8,9,10,16,23) umwandeln (12 answers)
Opened by mixxer at 2019-08-22 22:28

GwenDragon
 2019-08-23 12:10
#190387 #190387
User since
2005-01-17
14790 Artikel
Admin1
[Homepage]
user image
Ein String-Replace und nach folgendes split kann das erledigen.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

my $string = '1-3,5,9,2-4,11-22,5,7';

# Ersetze Bereich durch einzelne Zeichen
# benutzt Ausführung von Perl in Ersetzungsteil des Regex
$string =~ s/((\d+)-(\d+))/join ',', $2..$3/ge;

# da numerisch nacheinadner gedruckt werden soll:
my @array = sort {$a <=> $b} split ',', $string;


//edit:
Kürzer, in dem beim Ersetzen mit der Kopie gearbeitet wird (Modifer /r)
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my @array
        = sort { $a <=> $b }
          split ',',
          $string =~ 
            s/
              # fange die Bereichsangabe als zwei Gruppen bestehend aus Ziffern
              ((\d+)-(\d+))
            /            
              # ersetze durch Zeichenkette 
              # erzeugt durch join mit Komma 
              join ',', 
              # aus der Liste des ersten bis zweiten matches
              $2..$3
            /rgex;
        


Ich weiß jetzt nicht ob Duplikate bei Seiten nicht vorkommen dürfen.

Editiert von GwenDragon: Kommentare, schöneres Regex
Last edited: 2019-08-23 12:54:43 +0200 (CEST)

View full thread '3,6-10,16,23' in (3,6,7,8,9,10,16,23) umwandeln