Python strip函数的bug?

欢迎访问Python3分钟系列。花3分钟时间,学习或温习一个Python知识点。 今天是第241。

大家好,我是小K,先祝大家2025年新年快乐哈~

今天给大家带一个有关于strip函数的陷阱……

strip默认删除的字符

默认情况下,striplstriprstrip 会删除所有的空白字符(包括空格换行符 \n制表符 \t )。

s = "\t maishu \n"
print(s.strip())  # 输出 "maishu"

陷阱:

如果你只想去掉空格,但字符串中有换行符或制表符,它们也会被意外删除。

规避方法:

明确指定要删除的字符

s = " \t maishu \n "
print(s.strip(" "))  # 输出 "\t maishu \n"(只去掉两侧的空格)

删除的字符是基于集合匹配

strip系列方法接受一个字符串参数,表示要删除的字符集合,而不是一个完整的字符串。

s = "abcdea"
print(s.strip("ab"))  # 输出 "cde"

strip(“ab”) 将 “a” 和 “b” 作为独立字符进行匹配,从字符串两侧删除,直到不再匹配为止。

陷阱:

如果你期望只删除开头和结尾的某个特定字符串(如 “ab”),结果可能和预期不同。

规避方法:

如果要删除特定的前缀或后缀,可以使用 str.removeprefixstr.removesuffix(需要Python 3.9+)

s = "abcdea"
print(s.removeprefix("ab"))  # 输出 "cdea"
640-31

动态内容可能引发意外结果

当删除的内容是动态的(比如用户输入的内容),可能会导致不易察觉的问题。

s = "2023年12月31日"
chars_to_remove = "0123"  # 动态指定要删除的字符
print(s.strip(chars_to_remove))  # 输出 "年12月31日"

陷阱:

strip 会将 “0123” 中的每个字符作为独立字符,删除两侧的所有匹配项。

规避方法:

明确指定前缀或后缀,或使用正则表达式来匹配更精确的模式。

import re
s = "2023年12月31日"
print(re.sub(r"^2023", "", s))  # 输出 "年12月31日"

最后

原文链接:https://www.zsiss.com/9979.html,转载请注明出处。
0

评论0

请先
响应式高端网站建设互联网营销网站模板ZS28573
响应式高端网站建设互联网营销网站模板ZS28573
5分钟前 有人购买 去瞅瞅看

社交账号快速登录