考虑以下字符串:
"bla ; bla"; bla
"bla "";"" bla"; bla
"bla ";" bla"; bla
Run Code Online (Sandbox Code Playgroud)
我正在尝试匹配任何;
不在带引号的字段(例如"bla ; bla"
)中或在 2 个引号之间的内容。
换句话说,我想匹配;
前两个字符串中的第二个和;
最后一个字符串中的所有字符串。
这是我一直在尝试的 2 个正则表达式,但我无法制作一个适用于所有情况的正则表达式。
^(['"])(?:(?!\1).)*\1(?=;)(*SKIP)(*F)|;
^(['"])(?:(?!(?!\1)\1).)*\1(?=;)(*SKIP)(*F)|;
Run Code Online (Sandbox Code Playgroud)
任何的想法?
编辑
我在最初的问题中省略了几个重要的细节。上面的示例行来自.csv
文件。我正在尝试;
从不同文件的行中提取所有文件分隔符。我的问题是区分;
引用字段内的引用(第 2 行)和由;
(第 3 行)分隔的两个引用字段。;
在我的情况下,总是跟在引用字段之后。
使用实际的 CSV 解析器(好吧,分号-SV)Text::CSV_XS
而不是尝试使用正则表达式来破解某些东西:
#!/usr/bin/env perl
use warnings;
use strict;
use feature qw/say/;
use Text::CSV_XS;
my $csv = Text::CSV_XS->new({ binary => 1, sep_char => ";"});
while (my $row = $csv->getline(\*DATA)) {
say $row->[0];
}
__DATA__
"bla ; bla"; bla
"bla "";"" bla"; bla
"bla ";" bla"; bla
Run Code Online (Sandbox Code Playgroud)