使用Python strip()函数遇异常:括号后字符被误删
解决strip()意外移除括号后首字符的问题
你遇到的问题是用strip()处理字符串时,括号后的'd'被意外移除了,代码和输出如下:
c = 'PurchaseOrderItem(d330d1adf0)' print(c.strip("PurchaseOrderItem("+")"))
输出:330d1adf0
预期:d330d1adf0
问题原因
核心误区:strip()的参数是字符集合,不是固定字符串
你传入的参数"PurchaseOrderItem()"是一个字符集合,里面包含了d(看PurchaseOrderItem里的Order有个d)。strip()会从字符串两端逐个移除所有属于这个集合的字符——先去掉开头的PurchaseOrderItem(,接下来的d也在集合里,所以会被一起移除,直到遇到不在集合里的3才停止,最后再去掉结尾的),就得到了330d1adf0。
解决方法
- 方法1:startswith+切片(最可靠)
先判断字符串是否以指定前缀开头,再通过切片精准去掉前缀和结尾的括号:
c = 'PurchaseOrderItem(d330d1adf0)' prefix = 'PurchaseOrderItem(' if c.startswith(prefix): result = c[len(prefix):-1] # -1表示去掉最后一个字符')' print(result) # 输出: d330d1adf0
- 方法2:拆分使用lstrip和rstrip(注意局限性)
如果能确定内容开头不会出现前缀里的字符(比如这里的d),可以用lstrip移除左侧的前缀字符集,再用rstrip移除右侧的):
c = 'PurchaseOrderItem(d330d1adf0)' result = c.lstrip('PurchaseOrderItem(').rstrip(')') print(result) # 输出: d330d1adf0
注意:如果内容开头也有前缀里的字符,这种方法还是会误删,优先用方法1
- 方法3:正则表达式提取括号内容
适合需要频繁提取类似格式内容的场景:
import re c = 'PurchaseOrderItem(d330d1adf0)' match = re.search(r'PurchaseOrderItem\((.*)\)', c) if match: result = match.group(1) print(result) # 输出: d330d1adf0
内容的提问来源于stack exchange,提问作者Souradeep Sengupta Developer D
相关产品推荐
相关产品推荐

