2013-06-05 129 views
1

這個問題有點令人困惑,所以我會用一個例子來解釋。我沒有特別使用任何語言。解析逗號分隔的字符串,其中包含包含逗號的字符串項目

我有以下字符串:

0,1, 「福」, 「藍,黃,紅」,27

我需要創建這些逗號分隔的數組值,但正如您所看到的,第四項(索引3)是一個帶引號的字符串,其中也包含逗號。

我需要得到這個字符串當作一個值,與報價不變,像這樣:在逗號

[0, 1, "foo", "blue,yellow,red", 27] 

分裂不會幫助我,因爲它也將拆分字符串項。我將如何去解析這個逗號分隔的字符串到項目列表中。

+1

你忘了標記您所使用的編程語言。 –

+0

對不起,我只是修改我的問題,說我沒有使用任何特定的語言。因此,只要他們顯示理論,任何語言的答案都會做。 –

+0

[正則表達式應該可以重複分割,包含在CSV文件的雙引號之外?](http://stackoverflow.com/questions/1603096/regular-expression-should-split-that-are-contained-外雙引號-i) –

回答

7

我不知道你的目標是什麼語言,但一般方法是每次閱讀一個字符,像往常一樣用逗號分開。但是,如果您遇到"作爲新項目的第一個字符,您可以設置一個標誌(如in_quotes)。如果設置了該標誌,則讀取所有字符,直到下一個",此時您將該標誌設置爲false。

1

我會建議使用strtok使用逗號作爲字段分隔符。但是,如果字符串中的第一個字符是雙引號,則應該使用"作爲字段分隔符。

如果我認爲你表現出是一個struct,我寫在C代碼打印在單獨的行輸出:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[] = "0,1,\"foo\",\"blue,yellow,red\",27"; 

    printf ("Input string: %s\n", str); 

    char * substr; 
    char * str_itr = str; 
    char comma[] = ","; 
    char quote[] = "\""; 

    substr = strtok (str_itr, comma); 
    if (substr) 
     printf ("%s\n", substr); 

    substr = strtok (NULL, comma); 
    if (substr) 
     printf ("%s\n", substr); 

    substr = strtok (NULL, quote); 
    if (substr) 
     printf ("%s\n", substr); 

    substr = strtok (NULL, quote); 
    substr = strtok (NULL, quote); 
    if (substr) 
     printf ("%s\n", substr); 

    substr = strtok (NULL, comma); 
    if (substr) 
     printf ("%s\n", substr); 

    return (0); 
} 
0

用Perl:

my $s = '0,1,"foo","blue,yellow,red",27'; 
my @l = grep {defined $_} split(/("[^"]*")|,/, $s); 
print join("-" , @l), "\n"; 

輸出:

0-1--"foo"---"blue,yellow,red"--27 
相關問題