4

我有一个关于strip()Python 的问题。我正在尝试从字符串中删除分号,当分号位于字符串末尾时,我知道该怎么做,但是如果它不是最后一个元素,我该怎么做,但是说第二个到最后一个元素。

例如:

1;2;3;4;\n

我想去掉最后一个分号。

4

8 回答 8

8

剥离其他字符。

>>> '1;2;3;4;\n'.strip('\n;')
'1;2;3;4'
于 2012-09-24T01:30:38.550 回答
4
>>> "".join("1;2;3;4;\n".rpartition(";")[::2])
'1;2;3;4\n'
于 2012-09-24T01:37:47.980 回答
4

更换怎么样?

string1='1;2;3;4;\n'
string2=string1.replace(";\n","\n")
于 2012-09-24T12:28:19.957 回答
2
>>> string = "1;2;3;4;\n"
>>> string.strip().strip(";")
"1;2;3;4"

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

于 2012-09-24T01:31:44.177 回答
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'

提供的其他答案可能会更快,因为它们是根据您的特定示例量身定制的,但这个更灵活一些。

于 2012-09-24T01:46:18.073 回答
1
re.sub(r';(\W*$)', r'\1', '1;2;3;4;\n') -> '1;2;3;4\n'
于 2012-09-24T02:10:54.857 回答
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, ';')
于 2012-09-24T08:19:57.557 回答
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:]
于 2013-06-08T03:02:00.230 回答