Perl读取文件并提取价格

时间:2014-10-13 19:42:16

标签: regex perl

file.txt文件包含字符串"你好苹果今天花费10.99"

如何仅提取10.99?

这是我到目前为止所做的:

open READFILE, ("<file.txt");
while (<READFILE>)
{   
    if ($a = $_ =~ m/\d\.\d/)
    {
        print "$a\n";
    }
}

但是,我的输出显示1而不是10.99。你能告诉我出了什么问题吗?

3 个答案:

答案 0 :(得分:0)

将您的代码更改为此

while (my $a = <DATA>) {
    if ($a =~ s/.*?(\d+\.\d+).*/$1/)
    {
        print "$a\n";
    }
}
  • s/regex/replacement/modifiers

s/.*?(\d+\.\d+).*/$1/除小数点数外,所有字符都匹配。该数字由捕获组捕获。用组索引1中的字符替换所有字符将只给出小数点数。该特定号码已分配给变量a

OR

while (my $a = <DATA>) {
    if ($a =~ m/.*?(\d+\.\d+).*/)
    {
        print "$1\n";
    }
}

正则表达式.*?(\d+\.\d+).*与输入字符串匹配,成功匹配时,捕获输入字符串中的小数点数。通过打印组索引1将为您提供存储的小数点数。

答案 1 :(得分:0)

你得到的1表明有匹配。您需要括号来捕捉匹配。

open READFILE, "<file.txt";
while (<READFILE>)
{
    if (m/([\d\.]+)/)
    {
        my $price = $1;
        print "price = $price\n";
    }
}

答案 2 :(得分:0)

 open READFILE, "file.txt";
 while (<READFILE>)
 {   
     if ($_ =~ /(\d+\.\d+)/)
     {
         print "$1\n";
     }
 }

你很高兴