Python3 strip() 得到意外结果

Python3 strip() get unexpect result

这是一个奇怪的问题

to_be_stripped="D:\Users\UserKnown\PycharmProjects\ProjectKnown\PT\collections\120"

以及下面的两个字符串:

s1="D:\Users\UserKnown\PycharmProjects\ProjectKnown\PT\collections\120\[Content_Types].xml"
s2="D:\Users\UserKnown\PycharmProjects\ProjectKnown\PT\collections\120\_rels\.rels"

当我使用下面的命令时:

s1.strip(to_be_stripped)
s2.strip(to_be_stripped)

我得到这些输出:

'[Content_Types].x'
'_rels\.'

如果我使用 lstrip(),它们将是:

'[Content_Types].xml'
'_rels\.rels'

这是正确的输出。 然而,如果我们将所有Project Known替换为zeus_pipeline

to_be_stripped="D:\Users\UserKnown\PycharmProjects\zeus_pipeline\PT\collections\120"

并且:

s2="D:\Users\UserKnown\PycharmProjects\zeus_pipeline\PT\collections\120\_rels\.rels"

s2.lstrip(to_be_stripped)将是'.rels'

如果我使用 / 而不是 \ 不会出错 。我想知道为什么会出现这个问题。

strip 并不意味着完全删除完整的字符串。相反,您给它一个字符串,然后从开头删除该字符串中的每个字符,并从要删除的字符串中删除。

在您的例子中,变量 to_be_stripped 包含字符 ml,因此这些字符从 s1 的末尾删除。但是,它不包含字符 x,因此剥离在那里停止,除此之外的任何字符都不会被删除。

查看 this question。接受的答案可能比您需要的更广泛 - 我喜欢另一个用户使用 replace 而不是 strip 的建议。这看起来像:

s1.replace(to_be_stripped, "")