Python进行批量字符替换的3种方法

一、问题的提出

之前,我写过一篇如何在word中计算数学算式:

如何用Python批量计算Word中的算式-CSDN博客

为了计算算式,就需要对算式进行格式化,把不规则的算式转换成规则的算式,这时就会涉及到一些字符的批量替换。如我们把算式:

1.3×14×2×[1+(76-50)/120]

转换成下面的规则算式,这样才能让Python中的eval()函数进行计算。

1.3*14*2*(1+(76-50)/120)

那么,如何把这里面的乘号替换成星号,把方括号替换中圆括号呢?这里我们采用下面的3种方法,通过python来实现。

二、批量字符替换的方法

1. replace法

利用replace函数,对于字符串中的三个字符进行多次替换,不需要导入其它的包,可以一次替换完成,并通过eval和round打印出保留2位小数后的结果,代码如下:

#replace法
s = "1.3×14×2×[1+(76-50)/120]"
if "×" or "[" in s:
    s = s.replace("×","*").replace("[","(").replace("]",")")
print(round(eval(s),2))

2. 字典法

我们可以制作一个替换用的字典,通过Python循环字典,对于符合要求的字符进行检测,如果在字典里可以查询到,就进行替换。

# 字典法
dic = {"x":"*","[":"(","]":")"}
for k,v in dic.items():
    s.replace(k,v)
print(round(eval(s),2))

以上是遍历的字典,只需要循环3次即可,下面我还可以通过利用字典+列表推导式的形式实现。这里主要采用了字典的get()方法,替换转换为列表后的字符,然后再用join()函数合成。

s = "1.3×14×2×[1+(76-50)/120]"
dic = {"x":"*","[":"(","]":")"}
s = [dic.get(i,i) for i in s] #也可以使用这个列表推导式实现。
s = "".join(s)
print(round(eval(s),2))

3. maketrans法

用maketrans生成映射表,然后用translate进行批量替换,代码如下:

#maketrans映射法
s = "1.3×14×2×[1+(76-50)/120]"
intab = "×[]"
outtab = "*()"
transtab = str.maketrans(intab,outtab)
s = s.translate(transtab)
print(round(eval(s),2))

4. 效果展示

以下是在thonny中运行的效果展示:

字符替换效果展示

三、学后反思

  1. 三种方法都可以高效地实现替换,第一种最常见,第二种思路最清晰,第三种使用起来更简单一些。
  2. 考虑到制作字典比较麻烦,可以采用第三种方法,或者用zip()把两个字符列表组合成字典,再采用第二种方法进行替换。
  3. 第一种方法不太适用于3个以上字符的替换,那样代码量多,而且写起来比较复杂,建议采用第二种和第三种方法来解决。
  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PythonFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值