我在python 2.7中有一个字符串
s1='path#poss|<-poss<-home->prep->in->pobj->|pobj'
我想从头开始删除'path#'。 当我使用 lstrip 时,它会以奇怪的输出结束,并且会删除额外的'p'。
的输出s2 = s1.lstrip('path#')
是
'oss|<-poss<-home->prep->in->pobj->|pobj'
而不是
'poss|<-poss<-home->prep->in->pobj->|pobj'
它适用于其他示例,例如:
'path#nsubj|<-nsubj<-leader->prep->of->pobj->|pobj'
被正确剥离到:
'nsubj|<-nsubj<-leader->prep->of->pobj->|pobj'
为什么python会从字符串中删除额外的字母?
答案 0 :(得分:5)
这应该这样做:
prefix_to_strip = 'path#'
s1 = 'path#poss|<-poss<-home->prep->in->pobj->|pobj'
s1 = s1[len(prefix_to_strip):]
strip()
无法正常工作,因为它只会删除字符串中的任何字符(或严格来说,可以迭代)。
P.S。如果您希望能够安全地将此应用于任何字符串(即可能不以path#
开头的字符串),请执行以下操作:
if s1.startswith(prefix_to_strip):
s1 = s1[len(prefix_to_strip):]
甚至:
def strip_prefix(prefix, string):
return string[len(prefix):] if string.startswith(prefix) else string
strip_prefix('foo#', 'foo#bar') # => 'bar'
strip_prefix('foo#', 'hello') # => 'hello'
答案 1 :(得分:3)
答案 2 :(得分:3)
这将解释我相信的一切
s1 = 'pppppppppppppp1pppppppppppppp'
print s1.lstrip("path#")
print s1.rstrip("path#")
print s1.strip("path#")
<强>输出强>
1pppppppppppppp
pppppppppppppp1
1
答案 3 :(得分:1)
不,这并不奇怪。 str.strip
不会删除前缀或后缀,它会删除传递给它的所有字符组合。
来自str.strip([chars])
上的docs:
返回带有前导和尾随字符的字符串副本 除去。
chars
参数是指定集的字符串 要删除的字符。如果省略或None,则为chars参数 默认删除空格。 字符参数不是 前缀或后缀;相反,它的所有值组合都被剥离了:
同样适用于str.lstrip
和str.rstrip
。
<强>修正:强>
>>> s1 = 'path#poss|<-poss<-home->prep->in->pobj->|pobj'
if s1.startswith('path#'):
s2 = s1[len('path#'):]
>>> s2
'poss|<-poss<-home->prep->in->pobj->|pobj'