gpt4 book ai didi

regex - 精通正则表达式书中的 Perl 替换示例对我不起作用

转载 作者:行者123 更新时间:2023-12-02 02:58:41 26 4
gpt4 key购买 nike

我可能只是遗漏了一些简单的东西,但是 s/// 没有将更改后的字符串分配给我的变量。我尝试了一个更简单的 s///,它确实有效。

如果超过三位,此示例应删除小数点后的任何数字。

my $price = 12.34567;
print "$price\n";
$price =~ s/(\.\d\d[1-9]?)d*/$1/;
print "$1\n"; # This is printing .345 correctly.
print "$price\n"; # This should be 12.345 but is unchanged.

my $story = "dog";
$story =~ s/(do)g/$1/;
print "$story\n"; # This works. It's changed to "do"

编辑:如果第三位数字是零,它应该在两位数之后修剪它。

《美化股价:...始终取小数点后的前两位,只有第三位不为零时才取第三位。然后,删除任何其他数字。

最佳答案

你的替换是错误的。

$price =~ s/(\.\d\d[1-9]?)d*/$1/;

应该是

$price =~ s/(\.\d\d[1-9]?)\d*/$1/;

你自己的版本匹配是因为 d* 可以匹配一个空字符串,它这样做是因为小数点后第三位后没有 d 个字符

坚持任何第三位十进制数字都必须非零似乎很奇怪。所以 0.00 可以,但是 0.000 不行,并且会被截断为前者。这是你想要的吗?

关于regex - 精通正则表达式书中的 Perl 替换示例对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47819049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com