Perl从字符串/浮点数中删除截断零

时间:2017-10-25 05:52:40

标签: regex perl truncate

在下面的例子中,我试图忽略str1等于str2的所有情况,即str1 eq str2。以下是我面临的问题。

案例1: str1 ='{V1 0.85}'str2 ='{V1 0.850000}'

案例2: str1 ='{V1 0.65} {V2 off} {V_3 1.1}'str2 ='{V1 0.650000} {V2 off} {V_3 1.100000}'

案例3: str1 ='{V2 0.0} {V3 2.0} {V4 ON}'str2 ='{V2 0.0000000} {V3 2.000000} {V4 ON}'

如果从字符串中删除尾随0,则上述每个示例都应满足条件str1 = str2。

目前这是我正在使用的正则表达式:

$str2 =~ s/\.?0*}/\}/;

但它仅在某些情况下有效。 上面的案例2的示例删除了第1个{}而不是第2个集合中的零,即

之前: str1为'{v_0p65 0.65} {vout_off off} {v_1p1 1.1}'

后使用正则表达式为“{v_0p65 0.65} {vout_off off} {v_1p1 1.100000}”

代码如下所示(粘贴一个小片段太复杂了): str1和str2是迭代接收的2个哈希的精确输出 代码就是

if ($str1 eq $str2) { 
 #Don't do anything
else {
print ("str1 and str2 are not equal\n");
}

1 个答案:

答案 0 :(得分:2)

s/ \K0*([0-9]+\.[0-9]+?)0*(?=})/$1/g;

在英语中,在空格和}之间,删除小数点前的前导零(不包括小数点前的零)和末尾的尾随零(不包括小数点后的零)。 / p>

/g使其在同一个字符串中运行的次数最多。这似乎是你错过的关键部分,尽管你的替代也存在其他问题。