file.txt文件包含字符串"你好苹果今天花费10.99"
如何仅提取10.99?
这是我到目前为止所做的:
open READFILE, ("<file.txt");
while (<READFILE>)
{
if ($a = $_ =~ m/\d\.\d/)
{
print "$a\n";
}
}
但是,我的输出显示1而不是10.99。你能告诉我出了什么问题吗?
答案 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";
}
}
你很高兴