我有特定格式的数据。
电容器#(。c( 3.58782e-14 )) c_1310 ( vsub , vss_res );
我想从数据集中提取BOLD中突出显示的那些。我尝试使用正则表达式
$cap = $line =~ /([0-9]*\.?[0-9]+([eE][-]?[0-9]+)?)/ ;
($net1, $net2) = $line =~ /\(([A-Za-z0-9_]*) \, ([A-Za-z0-9_]*)\)/ ;
$ line包含每个数据行。需要帮助才能更正正则表达式。
我有一个使用split()函数的解决方案,但我认为正则表达式会更好。
答案 0 :(得分:0)
假设数据的格式总是相同的,那么这样的事情应该起作用
my $line = 'capacitor #(.c(3.58782e-14)) c_1310 (vsub, vss_res);';
my ($net1, $net2, $net3) = $line =~ /\(.+\((.+)\)\)\s+(.+)\s+\((.+)\)/;
答案 1 :(得分:0)
原帖似乎做了一些检查和验证(与匹配'。'匹配任何东西相比),我会在这里建议一个更有效的版本:
use Modern::Perl;
use Regexp::Common;
my $line = 'capacitor #(.c(3.58782e-14)) c_1310 (vsub, vss_res);';
my ($cap, $cap_no, $net1, $net2) = $line =~ /
\([^(]+\( ($RE{num}{real}) \)\)
\s+(\w+)\s+
\(
(\w*) ,\s*
(\w*)
\)
/x;
say "cap: $cap cap_no: $cap_no net1: $net1 net2: $net2";
输出:
cap: 3.58782e-14 cap_no: c_1310 net1: vsub net2: vss_res