簡體   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