我从perl调用我的程序并获取输出:
$output = `$calling 2>>bla.txt`;
现在我只需要一个特定的值,它将在输出中显示,我可以用Regex查看。 所需的输出是:
从XY段到其质心的距离为:3.455564713591596
XY是任何数字,我只是匹配“它的质心是:”以下:
if( $output =~ m/\sto\sits\sCentroid\sis:\s(\d)*$/)
但是,我如何只得到接近结尾的值? 我只是想把它打印在屏幕上。
有什么建议吗?
答案 0 :(得分:4)
而不是\d*
(“零或更多数字”),您可能需要匹配\d+([.]\d+)?
(“一个或多个数字,可选地后跟一个小数点和一个或多个附加数字”) 。那会给你:
if( $output =~ m/\sto\sits\sCentroid\sis:\s\d+([.]\d+)?$/)
(Jonathan Leffler指出这一点)。
完成后 - 您想要捕获\d+([.]\d+)?
,因此,将其包装在括号中以创建捕获组:
if( $output =~ m/\sto\sits\sCentroid\sis:\s(\d+([.]\d+)?)$/)
然后特殊变量$1
将是它捕获的内容:
if( $output =~ m/\sto\sits\sCentroid\sis:\s(\d+([.]\d+)?)$/)
{ print $1; }
请参阅the "Extracting matches" section of the perlretut
("Perl regular expressions tutorial") manual-page。
顺便说一下,\s
匹配单个空白字符。通常你想要只匹配一个实际的空间 - 例如to its
而不是to\sits
- 或匹配一个或更多空白字符 - 例如to\s+its
。
答案 1 :(得分:3)
使用括号打印在正则表达式中捕获的数字:
print "$1\n" if ($output =~ m/\sto\sits\sCentroid\sis:\s([-+]?\d*\.?\d+)$/);
您还要确保正则表达式可以拾取带小数点的数字,并且我也允许使用可选符号。如果您需要担心可选指数,请在我的正则表达式(?:[eE][-+]?\d+)?
之后添加\d+
。
如果您还有其他与该值有关的内容,请转换为常规if
语句:
if ($output =~ m/\sto\sits\sCentroid\sis:\s([-+]?\d*\.?\d+)$/)
{
print "$1\n";
process_centroid($1);
}