2009-06-20 11 views
5

ich wissen will, ist es eine Möglichkeit, Text wie folgt aufgeteilt:Splitting Text

123456789 in 123-456-789

als hinzufügen "-" nach jeweils 3 Zeichen?

Ich wollte nur wissen, wie ich das Gegenteil weiß, aber wie dies zu tun ist, ist über meinen Kopf. ;)

und auch wenn der Text

ABCDEFGHI OR A1B2C3D4E or any other format 
without any space between the characters ! 

languge : PHP only 
+1

Ja, das auf jeden Fall möglich ist. Gib uns doch einen Hinweis ... welche Programmiersprache benutzt du? –

+1

Dies ist sicherlich möglich, aber Sie erhalten bessere Antworten, wenn Sie angeben, in welcher Sprache oder Plattform Sie arbeiten. –

+1

In welcher Sprache? – stefanB

Antwort

4

<?php 
$i = '123456789'; 
echo 'result: ', wordwrap($i, 3, '-', true);
druckt
result: 123-456-789

siehe http://php.net/wordwrap

+0

ABCDEFGHI ODER A1B2C3D4E oder ein anderes Format, was dann? –

+0

ja das funktioniert perfekt .... –

0

In Perl:

#!/usr/bin/perl 

use strict; 
use warnings; 

my $string = "123456789"; 
$string =~ /(\d{3})(\d{3})(\d+)/; 

print "$1-$2-$3" 
0

Sie tun können, es mit (unter anderen Mitteln) einen regulären Ausdruck und ersetzen. Die genaue Syntax hängt vom verwendeten Werkzeug oder der Programmiersprache ab. Zum Beispiel wäre eine Möglichkeit, es in Perl zu tun

$a = "123456789"; 
$a =~ s/(\d{3})/$1-/g; 
chop($a); 
print $a; 

Linie 2 alle 3 Ziffern für die gleichen drei Ziffern und einen Bindestrich ersetzt. Mit chop() löschen wir den nachfolgenden Bindestrich.

Es gibt eine andere Frage hier. Was tun, wenn die Zeichenkette keine Anzahl von Ziffern multipliziert mit 3 enthält? Wenn solche Strings erlaubt wären, müsste das obige Snippet modifiziert werden.

Abhängig von den Besonderheiten des Falls, können Sie auch mit einfachen Substring-Ersatz oder String-Slicing kommen.

+0

Dies scheint eine Ziffer abzuhacken, wenn die Anzahl der Ziffern kein Vielfaches von 3 ist. – Svante

+0

Haben Sie Absatz 4 gelesen? :) –

+0

was ist, wenn seine ABCDEFGHI ODER A1B2C3D4E dann, wie der Text und in php nur teilen –

1

Im Interesse der Vollständigkeit, hier ist eine Python-Lösung:

>>> a = "123456789" 
>>> a[0:3] + "-" + a[3:6] + "-" + a[6:9] 
'123-456-789' 

Da Sie Ihre Frage aktualisiert, um eine PHP-Lösung zu geben, sollte diese Arbeit:

substr($a, 0, 3) . "-" . substr($a, 3, 3) . "-" . substr($a, 6, 3) 

substr Weitere Informationen finden Sie auf diese Funktion. Dies funktioniert nicht nur für Ziffern, sondern auch für alphabetische Zeichen.

2

Ich bin kein großer Fan von Regexes für einfache String-Extraktion (insbesondere Extraktionen mit fester Länge), bevorzugen sie für etwas komplexere Sachen.Fast jede Sprache hat eine Teilfunktion so, vorausgesetzt, Ihre Eingabe bereits validiert worden ist, eine einfache (Pseudo-Code, da Sie keine Sprache angegeben haben):

s = substring (s,0,3) + "-" + substring (s,3,3) + "-" + substring (s,6,3) 

Wenn Sie es möchten alle drei Zeichen für eine Variable Zeichenfolge (mit ungerader Größe am Ende):

t = "" 
sep = "" 
while s != "": 
    if s.len <= 3: 
     t = t + sep + s 
     s = "" 
    else: 
     t = t + sep + substring (s,0,3) 
     s = substring (s,3) 
    sep = "-" 
s = t 
+0

Aber was ist mit ABCDEFGHI ODER A1B2C3D4E –

+0

Was ist damit? Wenn die Spezifikation eine beliebige Zeichenfolge verarbeiten soll, behandelt der obige Code eine beliebige Zeichenfolge. Es muss nicht numerisch sein. – paxdiablo

1

ich denke, dass diese sanely in einer Regex mit Look-Ahead getan werden kann:

s/(.{3})(?=.)/$1-/g 

Da Sie PHP in einem Kommentar erwähnt:

preg_replace ("/(.{3})(?=.)/", "$1-", $string); 

bearbeiten: Nach VolkerK wordwrap zeigte, fand ich chunk-split in der Dokumentation:

$new_string = chunk_split ($string, 3, '-'); 

Dies hat den Vorteil, dass es funktioniert auch, wenn es Leerzeichen in der Zeichenfolge (wordwrap würden es vorziehen, Pause in den Räumen).

+0

Ihre Definition von gesund ist im Widerspruch zu mir :-) – paxdiablo

+0

Wegen der Lookahead? – Svante

0

Ein weiteres Perl-Beispiel. Dadurch werden die endgültigen Gruppen, die kleiner als drei sind, nicht entfernt, und die anfänglichen Gruppen mit weniger als drei Ziffern bleiben übrig. Es ist (ziemlich schamlos) auf die "Geld-Nummern" Beispiel in Learning Perl (Seite 212 der 5. Auflage) basiert:

#!/usr/bin/env perl 
use strict; 
use warnings; 

print "Gimme' a number: "; 
chomp(my $number = <STDIN>); 

1 while ($number =~ s/([0-9]{3})([0-9]+)/$1-$2/); 

print "Now it's $number\n"; 
1

Noch eine andere Python-Version:

>>> x="123456789" 
>>> out=[x[i:i+3] for i in xrange(0, len(x), 3)] 
>>> print "-".join(out) 
123-456-789 
1

Für jede Sprache:

  • eine leere Zeichenfolge Variable "result"
  • eine ganze Zahl Zählvariable erstellen, "i", das INCRE gen, bis die Länge des ursprünglichen Zeichenfolge (die mit der Anzahl)
  • jedes Zeichen aus der Original-Zeichenkette anhängen zu „Ergebnis“
  • Wenn i 3 modulo (normalerweise% oder mod) Null ist, hängen einen Bindestrich zu "Ergebnis"