Regex 正则表达式替换

Regex 正则表达式替换,regex,perl,Regex,Perl,我有点像perl noob,试图找出如何从一段文本中去掉一些零。 这条线看起来像这样: 76.000 to 80.000 我试图去掉零,使它看起来像这样 76.0 to 80.0 但我这辈子都不能做regex的工作 这就是我所拥有的 if ($data =~ m/00/) # This is working { $data = s/(.*)\00(\s\[to]\s)(.*)\00/($1)($3)($4)/; # This isn't } 非常感谢。简单地说一下: $dat

我有点像perl noob,试图找出如何从一段文本中去掉一些零。 这条线看起来像这样:

76.000 to 80.000 
我试图去掉零,使它看起来像这样

76.0 to 80.0
但我这辈子都不能做regex的工作

这就是我所拥有的

if ($data =~ m/00/) # This is working

{

   $data = s/(.*)\00(\s\[to]\s)(.*)\00/($1)($3)($4)/; # This isn't

}
非常感谢。

简单地说一下:

$data =~ s/0+$/0/;
简单地说:

$data =~ s/0+$/0/;

这是截断字符串内浮点数的通用方法:

s/([\d.]+)/ sprintf '%.1f', $1 /ge
在替换中使用
sprintf
,通过使用求值来格式化捕获的内容。请注意,这将强制所有数字使用此格式

处理这个问题的一个更具体的方法是

s/\d+\.0\K0*//g

使用
\K
(keep)转义保留数字后跟句点和零,并删除该字符串后面的所有零。

这是截断字符串内浮点数的通用方法:

s/([\d.]+)/ sprintf '%.1f', $1 /ge
在替换中使用
sprintf
,通过使用求值来格式化捕获的内容。请注意,这将强制所有数字使用此格式

处理这个问题的一个更具体的方法是

s/\d+\.0\K0*//g

使用
\K
(keep)转义保留数字后面的句点和零,并删除该字符串后面的所有零。

谢谢WoLpH。这很有效。看来我可能把“~”漏掉了,弄糊涂了。干杯汉克斯沃尔夫。这很有效。看来我可能把“~”漏掉了,弄糊涂了。干杯