1

私はPerlの初心者です。正規表現を使用して、検索リストから不要な浮動小数点数を除外する方法を知りたいだけです。

スクリプトのこのサンプル部分があります。

#!/usr/bin/perl

use strict;
use warnings;

my $teststring = "delay PADI_DEL,del:0.352, 0.352, 0.376, 0.376 PIO PAD PADDI (PADDI:PADDI IOBUF:::IO_TYPE=SUBLVDS,BANK_VCCIO=2.5); pio_INR_drt";

$teststring =~ s/[^\d.\s]//g;
print "$teststring\n";

次のような出力が期待されます。

0.352 0.352 0.376 0.376

抽出は正しいのですが、最後に求めた浮動小数点数の後に不要な数値が表示されます。私のコードを使用した実際の出力は次のようになります。

0.352 0.352 0.376 0.376      2.5  

「2.5」の不要な浮動小数点数を検出しないように正規表現を変更するにはどうすればよいですか。

助けてくれてありがとう。

4

4 に答える 4

0

最初に親内のものを取り除くことができます (そして前の空白は最後に):

$teststring =~ s/\([^)]*\)//;
$teststring =~ s/[^\d.\s]//g;
$teststring =~ s/^\s*//;

そして、数値を格納するための配列を使用した同じアイデア:

$teststring =~ s/\([^)]*\).*$//;
my @v = ($teststring =~ /\d+\.\d+/g);
print join (" ", @v), "\n";
于 2013-01-04T07:36:36.547 に答える
0

入力形式が固定されている場合、フロートを直接取得するには、次のようにします。

#!/usr/bin/perl

use strict;
use warnings;

my $teststring = "delay PADI_DEL,del:0.352, 0.352, 0.376, 0.376 PIO PAD PADDI (PADDI:PADDI IOBUF:::IO_TYPE=SUBLVDS,BANK_VCCIO=3.3); pio_INR_drt";

$teststring =~ s/(0\.\d+).*(0\.\d+).*(0\.\d+).*(0\.\d+)//g;
print "$1 $2 $3 $4\n";

これは、0.XXX 形式で 4 つの float を検索します。

于 2013-01-04T07:38:25.973 に答える