我有一个关于strip()
Python 的问题。我正在尝试从字符串中删除分号,当分号位于字符串末尾时,我知道该怎么做,但是如果它不是最后一个元素,我该怎么做,但是说第二个到最后一个元素。
例如:
1;2;3;4;\n
我想去掉最后一个分号。
剥离其他字符。
>>> '1;2;3;4;\n'.strip('\n;')
'1;2;3;4'
>>> "".join("1;2;3;4;\n".rpartition(";")[::2])
'1;2;3;4\n'
更换怎么样?
string1='1;2;3;4;\n'
string2=string1.replace(";\n","\n")
>>> string = "1;2;3;4;\n"
>>> string.strip().strip(";")
"1;2;3;4"
这将首先删除任何前导或尾随空格,然后删除任何前导或尾随分号。
试试这个:
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'
提供的其他答案可能会更快,因为它们是根据您的特定示例量身定制的,但这个更灵活一些。
re.sub(r';(\W*$)', r'\1', '1;2;3;4;\n') -> '1;2;3;4\n'
您可以用分号拆分字符串,然后使用 ; 再次将非空部分连接回来。作为分隔符
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, ';')
如果您只想使用 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:]