我需要删除浮点数中不需要的所有字符。
例如: 1)。 12.23xf00 - >它应该是12.23 2)。 15.0s->它应该是15.0
我试过了:
sub retain_num_chars($) {
my $string = shift;
$string =~ (?:^|(?<=\s))[0-9]*\.?[0-9](?=\s|$);
return $string;
}
$string=~ retain_num_chars($string);
来自Regex Matching numbers with floating point
但它返回一个错误:不匹配(在正则表达式中;由&lt; - HERE in m /:^ |(&lt; - HERE
)标记谢谢。我是perl的新人。
答案 0 :(得分:0)
这将完成你的工作:
(?=[^\d\.])(.*)
将捕获任何非小数非小数
你可以替换它
?= means a positive lookahead, which means that what follows is a non digit non .
答案 1 :(得分:0)
您的Perl
代码中存在多个错误。
首先是在函数内部。我没有看到你在那里使用正则表达式(s///
)或其他任何替换操作。使用以下两行,您可以从数字中删除不需要的东西。
## assuming the format is ...dd.ddxxx
$string =~ s/^\s+(?=\d)//; ## remove space from begin
$string =~ s/(\.\d+).*/$1/; ## removing other things after keeping the dot and digits
在函数调用期间,您尝试使用=~
运算符进行分配,该运算符通常进行正则表达式匹配。因此,将其更改为=
。
$string = retain_num_chars($string);
答案 2 :(得分:0)
利用阿比盖尔的Regexp :: Common
use Regexp::Common;
...
... m/$RE{num}{real}/
答案 3 :(得分:0)
怎么样:
$string =~ /(?<!\d)\d+(?:\.\d+)?(?!\d);