问题来源
字符串一次替换,为什么不能多次替换呢,例如
1 | s = """ |
假设150要被替换成170,而170要被替换成190,如果for循环的话,
1 |
|
就会导致结果出现偏差,整个字符串都会变成190,那么应该有种方法,可以一次性的匹配完并且返回结果。
解决方式
关于re.sub.
1 | from typing import Dict |
情况一
- 没有一处匹配的情况
实际会被匹配到,但是替换值时会触发KeyError,所以返回group(0)
1 | formula_1 = """ |
- 匹配到一处的情况
由于150会被160替换,所以只有此处不会触发KeyError
1 | formula_2 = """ |
- 匹配多处的情况,情况一:一个类别出现多次
150会被160替换,170会被180替换,由于sub只走一次,而rep函数会被循环匹配
1 |
|
- 匹配多处的情况,情况二:多次匹配
同理如上
1 |
|
总结
sub可以传函数是一个非常有用的做法,其中rep函数会在sub匹配到多次调用,然后最终sub一次返回,这个非常有用。