Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 拆分以逗号分隔的列表,其中文本中的逗号不是';逃过_Regex_Perl - Fatal编程技术网

Regex 拆分以逗号分隔的列表,其中文本中的逗号不是';逃过

Regex 拆分以逗号分隔的列表,其中文本中的逗号不是';逃过,regex,perl,Regex,Perl,我使用的是传统数据,其格式通常为: QID RESPONSE 但是,在某些情况下,响应包含多个不同类型的值: 01320 2,35,6,"warm" 我试过使用 my @dataRowAsList = split('\t', $_); my $questionID = $dataRowAsList[0]; my $response = substr($dataRowAsList[1],0,-2); my @thisResponse = split(',', $respo

我使用的是传统数据,其格式通常为:

QID    RESPONSE
但是,在某些情况下,响应包含多个不同类型的值:

01320   2,35,6,"warm"
我试过使用

my @dataRowAsList = split('\t', $_); 
my $questionID = $dataRowAsList[0];     
my $response = substr($dataRowAsList[1],0,-2);
my @thisResponse = split(',', $response);
在相关案例中,将输出分为问题和响应,然后将每个响应分为组成部分

但我刚刚发现了这种情况:

01320   2,35,6,"warm,windy"
引号中的逗号不转义

有没有一种简洁的方法可以将其解析为组件

2
35
6
"warm,windy"
从字符串读取的快速用法示例:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw/say/;
use Text::CSV;

my $str = q/01320   2,35,6,"warm,windy"/;

my $csv = Text::CSV->new({auto_diag => 2});

my @fields = split " ", $str, 2;

say '$fields[0] is ', $fields[0];
say '$fields[1] is ', $fields[1];

say 'Parsed out $fields[1] is:';
$csv->parse($fields[1]);
say for $csv->fields;
运行此操作将产生:

$fields[0]是01320
$fields[1]是2,35,6,“温暖,有风”
解析出的$fields[1]是:
2.
35
6.
温暖的,多风的

这是一个非核心模块,因此您必须使用您喜爱的CPAN客户端或操作系统的软件包管理器安装它。如果这样做不能自动安装,您可能也希望这样做,以获得一个优化的实现,该实现带有自动使用(如果存在)的
Text::CSV

在您的情况下,我将使用regexp并检查我需要的组,这是一个示例,我希望它能帮助您

use warnings;
use strict;
my $string = '01320 2,35,6,"warm,windy"';

if ($string =~ /^(\d+)\t(\d+),{1}(\d+),{1}(\d+),{1}(\S+)$/gu) {
        print "$1\n$2\n$3\n$4\n$5\n\n";
}

使用
Text::CSV
或其他CSV模块。