如何正确使用strip方法提取目标字符串?
如何正确使用strip方法提取目标字符串?
嗨,我来帮你搞明白为啥你用strip/rstrip会得到意外的结果~
你现在遇到的问题,核心是误解了strip系列方法的工作逻辑:你以为传给strip的参数是一个完整的要移除的字符串,但实际上,strip的参数是一个字符集合——它会移除字符串两端所有属于这个集合里的单个字符,而不是匹配整个后缀。
举个例子,你写的'XCeed Plug-in Hybride'.rstrip(' Plug-in Hybride'),这里的参数包含了空格、P、l、u、g、-、i、n、H、y、b、r、d、e这些字符。所以它会从字符串末尾开始,逐个检查字符是否在这个集合里,直到遇到不在集合里的字符为止。'XCeed'里的最后两个字符'e'和'd'都在这个集合里,所以被移除了,最后就剩下'XC'。
那如果一定要用strip相关的方法实现需求呢?其实有点绕,但可以用反转字符串的技巧:先把原字符串和要移除的后缀都反转,然后用lstrip移除反转后的后缀,最后再反转回来,代码如下:
original_str = 'XCeed Plug-in Hybride' target_suffix = ' Plug-in Hybride' # 反转字符串和后缀,用lstrip移除反转后的后缀,再反转回来 result = original_str[::-1].lstrip(target_suffix[::-1])[::-1] print(result) # 输出 'XCeed'
不过说实话,这种方法有点舍近求远。更简单直接的方法有两种:
- 用
split按空格分割,只取第一部分:result = 'XCeed Plug-in Hybride'.split(' ', 1)[0] - 如果你的Python版本是3.9及以上,直接用
removesuffix方法(专门用来移除指定后缀的):result = 'XCeed Plug-in Hybride'.removesuffix(' Plug-in Hybride')
这两种方法都能精准得到你想要的'XCeed',比硬用strip要靠谱得多~
备注:内容来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

