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

2024-01-01 15:26:10

一、问题的提出

之前,我写过一篇如何在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个以上字符的替换,那样代码量多,而且写起来比较复杂,建议采用第二种和第三种方法来解决。

文章来源:https://blog.csdn.net/henanlion/article/details/135325173
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。