首页 > 解决方案 > Perl正则表达式提取浮点数

问题描述

我需要修改某人的 Perl 脚本,而我对 Perl 一点也不熟悉。

有一个标量变量$var,它的值是一个浮点数,可能后跟垃圾。我需要提取浮点数。

该数字采用非指数格式:DDD[.DDD],并且没有符号。

小数部分可能会丢失。整数部分没有丢失(.123只是垃圾)

如果变量以垃圾开头(特别是符号或小数点),我需要提取空字符串。

例子:

-123.456 ==> ""
123. ==> "123"
123.456.789 ==> "123.456"
123.456junk ==> "123.456"
123junk ==> "123"
123.junk ==> "123"     # strip the dot if no fraction
.123 ==> ""
junk ==> ""
000.000 ==> "000.000"

有人可以提供解决方案吗,我想应该是:$var =~ s/REGEX_EXPRESSION,但我不知道REGEX_EXPRESSION应该是什么。

谢谢你。

标签: regexperl

解决方案


更新后,您需要的表达式是:

^\d+(?:\.\d+)?
  • ^\d+匹配字符串开头的数字。
  • (?:非捕获组的开始。
  • \.\d+匹配文字.,后跟数字。
  • )?关闭非捕获组,使其成为可选。

检查这里的表达式。

一个 Perl 示例:

$var = "123.456.789";
print "old $var\n";
$var =~ /(^\d+(?:\.\d+)?)/;
print "new $1\n";

印刷:

old 123.456.789
new 123.456

推荐阅读