包含“#”时文本操作的意外输出

2024-04-24 12:57:49 发布

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

我在python2.7中有一个字符串

s1='path#poss|<-poss<-home->prep->in->pobj->|pobj'

我想从它的开头去掉路径。 当我使用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要从字符串中去掉多余的字母?你知道吗


Tags: ofpath字符串in路径homeossleader
3条回答

摘自lstrip的文献:

Return a copy of the string with leading characters removed. The chars argument is a string specifying the set of characters to be removed.

作为参数传递的字符是一个集合,由于'p'是它的一部分,它将删除缺少的'p'。你知道吗

这将解释我所相信的一切

s1 = 'pppppppppppppp1pppppppppppppp'
print s1.lstrip("path#")
print s1.rstrip("path#")
print s1.strip("path#")

输出

1pppppppppppppp
pppppppppppppp1
1

这应该做到:

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'

相关问题 更多 >