美文网首页
连续替换字符串时,关键字重复问题的一种解决思路

连续替换字符串时,关键字重复问题的一种解决思路

作者: Codmowa | 来源:发表于2019-11-06 15:38 被阅读0次

出问题的代码如下

for disp_name in self.filter.field_dict:
     filter_text = filter_text.replace(disp_name,self.fields[disp_name].where_name)

乍一看没什么问题, 但是当 disp_name 的值 与前一个 disp_name 所对应的 where_name 部分或者全部相等时就会出现 重复替换的问题 例如下面这段执行结果

filter_text  #开始之前 filter_text 的值为:
"(Disp_order_date = '1') and  ((Order_date > '2019-01-01') and  (Cust_no = 'wu~~~~'))"
filter_text # 第一次执行 此时 disp_name 为 disp_order_date
"($0.Order_date = '1') and  ((Order_date > '2019-01-01') and  (Cust_no = 'wu~~~~'))"
filter_text # 第二次执行 此时disp_name 为 Order_date 显然与前一个发生了重复
"($0.$0.Order_date = '1') and  (($0.Order_date > '2019-01-01') and  (Cust_no = 'wu~~~~'))"

解决办法其实很直接, 加盐, 统一改变 disp_name的值 如下所示

for disp_name in self.filter.field_dict:
     #filter_text = filter_text.replace(disp_name,self.fields[disp_name].where_name)
     filter_text = filter_text.replace(disp_name,f"""{{{disp_name}}}""")
for disp_name in self.filter.field_dict:
     filter_text = filter_text.replace(f"""{{{disp_name}}}""",self.fields[disp_name].where_name)

执行结果如下:

filter_text 
"({Disp_order_date} = '1') and  (({Order_date} > '2019-01-01') and  ({Cust_no} = 'wu~~~~'))"
filter_text
"($0.Order_date = '1') and  (($0.Order_date > '2019-01-01') and  ($218.Unit_no = 'wu~~~~'))"

那么 问题解决.o( ̄▽ ̄)o

相关文章

网友评论

      本文标题:连续替换字符串时,关键字重复问题的一种解决思路

      本文链接:https://www.haomeiwen.com/subject/dcvubctx.html