这个问题有点令人困惑,所以我将以一个例子来解释。我没有特别使用任何语言。
我有以下字符串:
0.1,为 “foo”, “蓝,黄,红”,27
我需要创建这些以逗号分隔的值的数组,但正如您所看到的,第四项(索引3)是一个带引号的字符串,其中也包含逗号。
我需要将该字符串作为一个值,引号完整如下:
[0, 1, "foo", "blue,yellow,red", 27]
分裂逗号不会帮助我,因为它也会拆分字符串项。我如何将这个以逗号分隔的字符串解析为项目列表。
答案 0 :(得分:7)
我不知道你的目标语言是什么,但一般的方法是一次读一个字符,像往常一样用逗号分隔。但是如果您遇到"
作为新项目的第一个字符,则设置一个标志(如in_quotes
)。如果设置了该标志,则在下一个"
之前读取所有字符,此时将标志设置为false。
答案 1 :(得分: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 );
}
答案 2 :(得分: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