繁体   English   中英

perl regex-将一行中的多个十进制数字转换为最接近的整数

[英]perl regex - convert multiple decimal numbers on a line to nearest integer

我正在练习一个Perl正则表达式问题,其中有以下格式的行从stdin中读取:

我以13.50美元的价格购买了2.3公斤的橙子。

从城市到大海需要4.5个小时。

她于2010年搬家,并于2014年离开。

而且我必须将每行中的所有十进制数字转换为最接近的整数。 因此,预期输出如下所示:

我以$ 14.00的价格购买了2公斤的橙子。

从城市到大海需要5个小时。

她于2010年搬家,并于2014年离开。

我有以下代码:

#!/usr/bin/perl -w
use strict;
use warnings;
use Math::Round;

my @lines = <STDIN>; 
chomp @lines;

foreach my $line (@lines) {
    $line =~ s/(\d+\.?\d*)/hello/g;
}

我不确定该怎么做的部分实际上是用其整数版本替换每行中的十进制数字。 我的方法是将stdin中的所有行读入数组,然后对每行中的每个匹配项将十进制数替换为其最接近的整数。 我知道您可以使用round()函数在Perl中舍入浮点数。

但是,使用round()函数作为's /(\\ d +。?\\ d *)// g'中的替换文本将不起作用。 使用替代运算符似乎是最简单的方法,但我认为我将无法使用它。 我不确定我可以使用其他什么方法来解决此问题。 任何见解将不胜感激。

使用s///e将代码作为替换表达式。 该代码应返回该值以用作替换。

 s/(\d+\.\d+)/ sprintf("%.0f", $1) /eg

(如果愿意,可以随意使用Math :: Round的round 。我只是用我熟悉的那个。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM