Sunday, February 15, 2009

String split problem

스트링에 아래와 같은 문자열이 저장되어 있다고 할 때,

my $string=q/ man , girl, woman, boy, "man,woman", "girl,boy"/ ;

콤마(,) 를 기준으로 각 단어를 나눌려면 어떻게 해야할까?
이때, 따옴표(")로 묶여있는 단어 사이의 콤마는 무시 한다.

나누어
@result=( 'man', 'girl', 'woman', 'boy', 'man,woman', 'girl,boy' )
6개의 element로 저장하는 것이 최종 목표.

내 답은 아래와 같다. 더 깔끔하고, 간결한 코드가 있겠지?

my @result;
map { /"/?push @result,$_:push @result, split /,/,$_ } split /(".*?")/, $string;

2 comments:

  1. ruby로 한다면...

    a = "man, girl, woman, boy, 'man,woman', 'girl,boy'"
    result = a.split(/,[^\"\S+,\S+\"]/)
    => ["man", "girl", "woman", "boy", "\"man,woman\"", "\"girl,boy\""]

    이거 때문에 아침부터 5분 허비했음!!

    ReplyDelete
  2. CPAN 모듈 이용,

    use Test::ParseWords;
    my @set=quotewords ',',0, $string ;

    ReplyDelete