perl - perl 提取字符串和科学数字
问题描述
我有特定格式的数据。
电容器 #(.c( 3.58782e-14 )) c_1310 ( vsub , vss_res );
我想从数据集中提取以粗体突出显示的那些。我尝试使用正则表达式
$cap = $line =~ /([0-9]*\.?[0-9]+([eE][-]?[0-9]+)?)/ ;
($net1, $net2) = $line =~ /\(([A-Za-z0-9_]*) \, ([A-Za-z0-9_]*)\)/ ;
$line 包含每个数据行。需要帮助来纠正正则表达式。
我有一个使用 split() 函数的解决方案,但我认为正则表达式会更好。
解决方案
原始帖子似乎做了一些检查和验证(与匹配任何内容的匹配“。”相反),我将在这里建议一个更验证的版本:
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
推荐阅读
- python - 如何使用 LaTeX 在 Jupyter Notebook 中水平包含两个图形,准备导出为 PDF?
- java - 在 java 中使用 HashMap 的 getValue 方法时出现 Nullpointer 异常
- r - 用 if 和 else if 条件编写 R 例程
- java - 无法使用 Apache Camel Bindy 向文件添加页眉和页脚
- flutter - Flutter - 如何将值从函数返回到变量
- javascript - 当设备移动时将用户发送到另一个页面
- reactjs - 任何人都可以分享下一个 js 与护照谷歌 oauth2 集成的例子吗?
- c# - 如何使用带有 where 子句的 linq 计算可数据列的总和?
- google-chrome - 如何在 Chrome 开发工具中退出屏幕选择?
- docker - 码头工人撰写运行
带启动脚本