質問

次のようにテキストを分割する方法はありますか:

123456789を123-456-789に変換

"-"を追加する場合3文字ごとに?

逆のことを知っているので、知りたかったのですが、これを行う方法は頭の上のところでした。 ;)

また、テキストが

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

languge : PHP only
役に立ちましたか?

解決

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

http://php.net/wordwrap

を参照

他のヒント

私は単純な文字列抽出(特に固定長抽出)の正規表現の大ファンではありません。少し複雑なものにはそれらを好みます。ほとんどすべての言語にはサブストリング関数があるため、入力がすでに検証されていると仮定すると、簡単です(言語を指定していないため、擬似コード):

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

可変長文字列(末尾に奇数サイズ)を3文字ごとに使用する場合:

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

任意の言語の場合:

  • &quot; result&quot;という空の文字列変数を作成します
  • 整数カウンタ変数&quot; i&quot;を作成します。この変数は、元の文字列(数字のあるもの)の長さまで増分します
  • 元の文字列の各文字を&quot; result&quot;に追加します
  • i modulo 3(通常%またはmod)がゼロの場合、ダッシュを&quot; result&quot;に追加します

完全を期すために、Pythonソリューションを以下に示します。

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

質問を更新してPHPソリューションを指定したので、これは機能するはずです:

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

この関数の詳細については、 substr を参照してください。これは数字だけでなく、アルファベット文字でも機能します。

さらに別のPythonバージョン:

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

これは、lookaheadを使用した正規表現で正常に実行できると思います:

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

コメントでPHPに言及したので:

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

編集:VolkerKが wordwrap を表示した後、ドキュメントで chunk-split を見つけました:

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

これには、文字列にスペースがある場合にも機能するという利点があります(ワードラップはスペースで分割することを好みます)。

Perlの場合:

#!/usr/bin/perl

use strict;
use warnings;

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

print "$1-$2-$3"

(他の手段の中でも)正規表現の一致と置換を使用して実行できます。正確な構文は、使用しているツールまたはプログラミング言語によって異なります。たとえば、Perlでそれを行う1つの方法は

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

行2は、3桁ごとに同じ3桁とダッシュを置き換えます。 chop()を使用して、末尾のダッシュを削除します。

ここには別の質問があります。文字列に3桁の倍数の数字が含まれていない場合はどうしますか?そのような文字列が許可されている場合、上記のスニペットを変更する必要があります。

また、ケースの詳細によっては、単純な部分文字列の置換、または文字列のスライシングで回避できる場合があります。

もう1つのPerlの例。これは3より小さい最終グループを削除せず、3桁未満の初期グループのみを残します。 「お金の数字」に基づいています(かなり恥知らずです)。 Learning Perl の例(第5版の212ページ):

#!/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";
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top