문제
나는 다음과 같은 텍스트를 분할하는 방법이 있는지 알고 싶습니다.
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);
인쇄물result: 123-456-789
다른 팁
나는 간단한 스트링 추출 (특히 고정 길이 추출)에 대한 Regexes의 열렬한 팬이 아니며 약간 더 복잡한 것들을 선호합니다. 거의 모든 언어에는 하위 문자열 기능이 있으므로 입력이 이미 검증되었다고 가정하면 간단합니다 (언어를 지정하지 않았기 때문에 의사 코드).
s = substring (s,0,3) + "-" + substring (s,3,3) + "-" + substring (s,6,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
어떤 언어라도 :
- "결과"라는 빈 문자열 변수 생성
- 정수 카운터 변수 "i"를 만듭니다. 원래의 문자열 (숫자가있는 사람)
- 원래 문자열에서 "결과"로 각 문자를 추가하십시오.
- Modulo 3 (일반적으로 % 또는 mod)이 0이면 "결과"에 대시를 추가하십시오.
완전성을 위해 여기에 파이썬 솔루션이 있습니다.
>>> 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
이 기능에 대한 자세한 내용은 이것은 숫자뿐만 아니라 알파벳 문자에도 효과적입니다.
또 다른 파이썬 버전 :
>>> 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, '-');
이것은 문자열에 공백이있을 때도 작동한다는 이점이 있습니다 (WordWrap은 공간에서 파손되는 것을 선호합니다).
Perl에서 :
#!/usr/bin/perl
use strict;
use warnings;
my $string = "123456789";
$string =~ /(\d{3})(\d{3})(\d+)/;
print "$1-$2-$3"
정규 표현식 일치 및 교체로 (다른 수단 중에서도) 할 수 있습니다. 정확한 구문은 사용중인 도구 또는 프로그래밍 언어에 따라 다릅니다. 예를 들어, Perl에서 수행하는 한 가지 방법은
$a = "123456789";
$a =~ s/(\d{3})/$1-/g;
chop($a);
print $a;
라인 2는 3 자리 숫자를 동일한 3 자리와 대시로 대체합니다. chop ()를 사용하여 후행 대시를 삭제합니다.
여기에 또 다른 질문이 있습니다. 문자열에 다중 x 3 자릿수가 포함되어 있지 않으면 어떻게해야합니까? 그러한 문자열이 허용되면 위의 스 니펫은 수정이 필요합니다.
또한 사례의 세부 사항에 따라 간단한 하부 스트링 교체 또는 스트링 슬라이싱으로 도망 갈 수 있습니다.
하나의 펄 예제. 이것은 3보다 작은 최종 그룹을 제거하지 않으며 3 자리 미만의 초기 그룹 만 남습니다. "돈 숫자"예제에 기반을두고 있습니다. 학습 perl (5 번째 ed 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";