我需要使用正则表达式从下面的行中提取第四个字段值(128)。
( '29/11/2010 09:38:05', '41297', '29/11/2010 09:40:30', '128', '17', 'SUCCESS', '30', 'e', '9843171457', '1', '-1')
请告诉我取第四个值的方法。
提前谢谢。
发布于 2011-07-27 13:10:37
使用CPAN中的Text::CSV
:
my $input = "( '29/11/2010 09:38:05', '41297', '29/11/2010 09:40:30', '128', '17', 'SUCCESS', '30', 'e', '9843171457', '1', '-1')";
my $csv = Text::CSV->new({
quote_char => "'",
always_quote => 1,
allow_whitespace => 1,
});
$csv->parse($input);
my @columns = $csv->fields();
print $columns[3], "\n"; # 128
发布于 2011-07-27 13:07:30
暴力方式:
/'[^']*',\s*'[^']*',\s*'[^']*',\s*'([^']*)'/
这是一个引号,后面跟着任意数量的非引号,然后是另一个引号、逗号和一些可选的空格。所有这一切都重复了四次,()
在第四个值附近捕获它。如果允许值中包含引号,这可能不起作用。
正如卡梅隆所指出的,你可以使用以下命令来避免重复:
/(?:'[^']*',\s*){3}'([^']*)'/
?:
告诉正则表达式解析器不要捕获括号中的内容。
使用逗号作为分隔符的split
来拆分列表可能更容易,然后获取第四个元素。当然,如果您可以在值中使用逗号,这可能不起作用。
发布于 2011-07-27 13:05:41
这只是perl的“分裂”命令
$str = ('29/11/2010 09:38:05','41297','29/11/2010 09:40:30','128','17','SUCCESS','30','e', '9843171457','1','-1');
@vars = split(/','/,$str);
print "${vars[3]}\n";
https://stackoverflow.com/questions/6844643
复制相似问题