在下面的例子中,我试图忽略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");
}
答案 0 :(得分:2)
s/ \K0*([0-9]+\.[0-9]+?)0*(?=})/$1/g;
在英语中,在空格和}之间,删除小数点前的前导零(不包括小数点前的零)和末尾的尾随零(不包括小数点后的零)。 / p>
/g
使其在同一个字符串中运行的次数最多。这似乎是你错过的关键部分,尽管你的替代也存在其他问题。