为什么我在Python中去掉字符串时会导致我需要的字符消失?

2024-06-06 11:47:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用的示例如下:

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

在这种情况下,我想要的是“我想要的东西”。然而,时不时地,当我点击打印时,我会得到一些想要的东西。我做错什么了吗?你知道吗

最新消息:我意识到我按别人的指示打错了字。我修好了。你知道吗


Tags: 数据版本示例编程情况最新消息moprint
3条回答

你似乎对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'

你有两个问题:

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)

使用str.replace更简单:

x = 'SomethingUnwanted_MO-WantedStuff'

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

print (f)   
# MO-WantedStuff

相关问题 更多 >