前一段时间交接了某个同事的项目,其中有个bug记录一下。
背景描述:若某个字符串的开头包含特定字符,则去除。
该同事的实现方式为:
# result的预期结果:牛舌,实际结果:舌
ori_str = "黑牛牛舌"
target = '黑牛'
result = ori_str.lstrip(target)
result
'舌'
原理:lstrip会删除ori_str字符串中开头处,且位于 target删除序列的字符,是按字符挨个匹配的,所以从左开始,“黑牛”在删除序列中,“牛”也在删除序列中。例如:下面这个例子:
ori_str_2 = "黑黑牛牛舌"
result_2 = ori_str_2.lstrip(target)
result_2
'舌'
解决办法:用正则最稳妥
import re
ori_str = "黑牛牛舌"
target = '黑牛'
result = re.sub("^%s" % target, "", ori_str) # 以target开头的部分用""代替