为什么当我剥离我的字符串时它会在 python 中取出我需要的字符?

Why is it when I strip my string it takes out a character I need in python?

我是编程新手,我正在尝试使用 python 来帮助我处理一些数据。大多数情况下,当我执行 .rstrip('') 时,它会执行我想要的操作。有几次,当我要求它打印剥离版本时,我注意到它像我不打算取出的额外 'M' 一样起飞。我做错了什么吗?

我使用的一个例子是这样的:

x = 'SomethingUnwanted_MO-WantedStuff'
f = x.rstrip('SomethingUnwanted_')
print f

在这种情况下我想要的是 'MO-WantedStuff'。然而,时不时地,当我点击打印时,我会得到 O-WantedStuff。我做错了什么吗?

更新:我意识到我打错了,正如有人向我指出的那样。我修好了。

您似乎对 rstrip 的作用感到困惑:

In [21]:

x = 'SomethingUnwanted_MO-WantedStuff'
f = x.rstrip('SomethingUnwanted_MO-WantedStuff')
f
Out[21]:
''

对比:

In [18]:

x = 'SomethingUnwanted_MO-WantedStuff'
f = x.split('_')[1]
f
Out[18]:
'MO-WantedStuff'

docs:

Return a copy of the string with trailing characters removed. If chars is omitted or None, whitespace characters are removed. If given and not None, chars must be a string; the characters in the string will be stripped from the end of the string this method is called on.

编辑

编辑后您似乎再次感到困惑,从上面传入的匹配序列已从右侧删除,在您的情况下,不会删除任何内容:

In [23]:

x = 'SomethingUnwanted_MO-WantedStuff'
f = x.rstrip('SomethingUnwanted_')
f
Out[23]:
'SomethingUnwanted_MO-WantedStuff'

如果您想从 侧去除传入的匹配项,您需要strip

In [24]:

x = 'SomethingUnwanted_MO-WantedStuff'
f = x.strip('SomethingUnwanted_')
f
Out[24]:
'MO-WantedStuff'

如@chapelo 所示,如果您只想从任何位置删除此字符串,则可以使用 replace:

In [25]:

x = 'SomethingUnwanted_MO-WantedStuff'
f = x.replace('SomethingUnwanted_','')
f
Out[25]:
'MO-WantedStuff'

改用str.replace,更简单:

x = 'SomethingUnwanted_MO-WantedStuff'

f= x.replace('SomethingUnwanted_', '')

print (f)   
# MO-WantedStuff

你有两个问题:

x.rstrip('SomethingUnwanted_')

首先,这会从字符串 x 右边 删除字符,但是不需要的字符在 左边 你的例子中的字符串。在这种情况下,您需要普通的 strip

其次,striprstrip不删除一个字符串,它们删除字符串中的所有字符,这是比较不同的。也就是说,剥离 'SomethingUnwanted_' 不会删除字符串 'SomethingUnwanted_',它会删除所有 S、所有 o、所有 m,以及很快。这就是为什么有时它删除的内容比您预期的要多。

你想要的是这样的:

x = 'SomethingUnwanted_MO-WantedStuff'
u = 'SomethingUnwanted_'

if x.startswith(u): x = x[len(u):]

您也可以使用正则表达式(re 模块)。这样,您可以使用 ^ 来确保它只在开头匹配。不过要小心;正则表达式是它们自己的小型迷你语言。您可以安全地使用字母数字字符和下划线,就像在您的示例中一样,但是某些字符在正则表达式中有自己的含义,并且可能无法达到您的预期。

import re

x = re.sub("^SomethingUnwanted_", "", x)