regex - Perl 中的多阶拆分
问题描述
我有一个来自 CSV 文件的字符串:
my $str = 'NA19900,4,111629038,0;0,0;0,"GSA-rs16997168,rs16997168,rs2w34r23424",C,T,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0';
应该(以某种方式)翻译成
'NA19900,4,111629038,0;0,0;0,"GSA-rs16997168;rs16997168;rs2w34r23424",C,T,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0';
这样 perlsplit
就不会将单个字段拆分GSA-rs16997168,rs16997168
为两个单独的字段
即如果逗号介于两者之间,则逗号应替换为分号"
我在Google上找不到如何执行此操作
到目前为止我已经尝试过:
$str =~ s/"([^"]+),([^"]+)"/"$1;$2"/g;
但这会因 > 2 个表达式而失败如果我能以某种方式告诉 perl 的
split
函数将所有内容计""
为一个字段,即使该文本具有,
分隔符,那将是很棒的,但我不知道该怎么做:(我听说过前瞻,但我不知道如何在这里使用它们:(
解决方案
当存在完美的解析器时,为什么要尝试重新创建 CSV 解析器?
use Text::CSV_XS qw( );
my $csv = Text::CSV_XS->new({ binary => 1, auto_diag => 2 });
while ( my $row = $csv->get_line($fh) ) {
$row->[5] =~ s/,/;/g
$csv->say(\*STDOUT, $row);
}
推荐阅读
- java - 我只想使用 File.renameTo() 函数重命名andorid应用程序中的文件,但它不起作用
- .net-core - pkcs11Interop 空槽列表
- pandas - Databricks 不显示带有 plotly 的熊猫图
- typescript - 打字稿中意外的“从不”
- spring-security - 在 IDP 上注册消失的 samlrequest
- r - R - 初始参数估计的奇异梯度矩阵
- r - 如何在没有时间模式的数据库中根据它们之间的时间间隔选择行/修复?
- laravel - 从 eloquent 模型中的另一个表中获取一个字段作为具有 if 逻辑的属性
- javafx - 是否可以在 JavaFX GUI 应用程序上执行无头 GUI 测试?
- macos - 无法在 MacOS 上设置 AppleId