Regex Perl读取文件并提取价格

Regex Perl读取文件并提取价格,regex,perl,Regex,Perl,一个file.txt文件包含字符串“hello the apple cost 10.99 today” 如何仅提取10.99 这就是我到目前为止所做的: open READFILE, ("<file.txt"); while (<READFILE>) { if ($a = $_ =~ m/\d\.\d/) { print "$a\n"; } } 打开READFILE,(“将代码更改为此 while (my $a = <DAT

一个file.txt文件包含字符串“hello the apple cost 10.99 today”

如何仅提取10.99

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

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

打开READFILE,(“将代码更改为此

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

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

您获得的1表示存在匹配。您需要括号来捕获匹配

open READFILE, "<file.txt";
while (<READFILE>)
{
    if (m/([\d\.]+)/)
    {
        my $price = $1;
        print "price = $price\n";
    }
}
openreadfile,”
openreadfile,“file.txt”;
而()
{   
如果($\=~/(\d+\.\d+/)
{
打印“$1\n”;
}
}

你可以开始了

谢谢,这很好!你能一个接一个地解释正则表达式的组成部分吗?谢谢。谢谢你的代码,括号里的意思是正则表达式中的这个吗?/()/是的,在()中的内容在下一行显示为$1
open READFILE, "<file.txt";
while (<READFILE>)
{
    if (m/([\d\.]+)/)
    {
        my $price = $1;
        print "price = $price\n";
    }
}
 open READFILE, "file.txt";
 while (<READFILE>)
 {   
     if ($_ =~ /(\d+\.\d+)/)
     {
         print "$1\n";
     }
 }