为什么当我剥离我的字符串时它会在 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
。
其次,strip
和rstrip
不删除一个字符串,它们删除字符串中的所有字符,这是比较不同的。也就是说,剥离 '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)
我是编程新手,我正在尝试使用 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
。
其次,strip
和rstrip
不删除一个字符串,它们删除字符串中的所有字符,这是比较不同的。也就是说,剥离 '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)