Python中的Strip函数

5
我是一名有用的助手,可以为您翻译文本。
我有一个关于Python中strip()的问题。我想从字符串中去除分号,当分号在字符串末尾时,我知道如何做到这一点,但如果它不是最后一个元素,而是倒数第二个元素,我该怎么办呢?
例如:
1;2;3;4;\n

我想去掉最后一个分号。

如果末尾有多个连续的分号怎么办?是全部删除还是只删除一个? - Janne Karila
8个回答

9
去掉其他字符。
>>> '1;2;3;4;\n'.strip('\n;')
'1;2;3;4'

我该如何去除它但不去除换行符? - crappy smith
2
你不能这样做;剥离(stripping)仅会从两端移除。如果你需要换行符,则需要在移除后再添加回来。 - Ignacio Vazquez-Abrams
1
没什么大不了的,但你可能想使用 rstrip 代替。 - wim
我的+1给wim。在这种情况下,您应该使用rstrip。原因是strip参数被解释为应该被剥离的一组字符(即所有这些字符--顺序不重要)。如果分号在开头使用(即空的第一个元素),则strip也会删除第一个分号。 - pepr
如果您在最后一个“;”后面有未指定的空格,例如'1;2;3;4; \t\n',请参见我的答案 - swang

4
>>> "".join("1;2;3;4;\n".rpartition(";")[::2])
'1;2;3;4\n'

4
替换怎么样?
string1='1;2;3;4;\n'
string2=string1.replace(";\n","\n")

2
>>> string = "1;2;3;4;\n"
>>> string.strip().strip(";")
"1;2;3;4"

这将首先删除任何前导或尾随的空格,然后删除任何前导或尾随的分号。


1

试试这个:

def remove_last(string):
    index = string.rfind(';')
    if index == -1:
        # Semi-colon doesn't exist
        return string
    return string[:index] + string[index+1:]

这应该能够删除行末的最后一个分号,而不管其后面跟着什么字符。

>>> remove_last('Test')
'Test'
>>> remove_last('Test;abc')
'Testabc'
>>> remove_last(';test;abc;foobar;\n')
';test;abc;foobar\n'
>>> remove_last(';asdf;asdf;asdf;asdf')
';asdf;asdf;asdfasdf'

其他提供的答案可能更快,因为它们是针对您特定示例量身定制的,但这个答案更加灵活。

1

您可以使用分号将字符串拆分,然后使用分号作为分隔符将非空部分重新连接在一起。

parts = '1;2;3;4;\n'.split(';')
non_empty_parts = []
for s in parts:
    if s.strip() != "": non_empty_parts.append(s.strip())
print "".join(non_empty_parts, ';')

1
如果您只想使用strip函数,这是一种方法: 使用切片符号,您可以将strip()函数的范围限制在字符串的一部分,并在末尾添加“\n”:
# create a var for later
str = "1;2;3;4;\n"
# format and assign to newstr
newstr = str[:8].strip(';') + str[8:]

使用rfind()方法(类似于Micheal0x2a的解决方案),您可以使语句适用于许多字符串:
# create a var for later
str = "1;2;3;4;\n"
# format and assign to newstr
newstr = str[:str.rfind(';') + 1 ].strip(';') + str[str.rfind(';') + 1:]

1
re.sub(r';(\W*$)', r'\1', '1;2;3;4;\n') -> '1;2;3;4\n'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接