如果给出字符串“John Doe; Lodging; 123; 050617”,这是一个文件内的一行,我需要删除之前的所有内容,包括第一个分号,以及后面和最后一个。我怎么能做到这一点,而不会删除我以后拆分剩余的子字符串的能力?如何删除以前出现的字符串部分;如果字符串中有多个分号?
先前的问题并没有解决一旦分离出去的部分,同时保留进一步使用所需的部分。
如果给出字符串“John Doe; Lodging; 123; 050617”,这是一个文件内的一行,我需要删除之前的所有内容,包括第一个分号,以及后面和最后一个。我怎么能做到这一点,而不会删除我以后拆分剩余的子字符串的能力?如何删除以前出现的字符串部分;如果字符串中有多个分号?
先前的问题并没有解决一旦分离出去的部分,同时保留进一步使用所需的部分。
逐步为清楚:
string = "John Doe;Lodging;123;050617"
lst = string.split(';')
lst = lst[1:-1]
string = ';'.join(lst)
print(string)
>>> 'Lodging;123'
为一条线:
';'.join('John Doe;Lodging;123;050617'.split(';')[1:-1])
>>> 'Lodging;123'
find方法会给你一个字符的第一个实例的索引从点到结束串in a string
original_s="John Doe;Lodging;123;050617"
idx = original_s.find(';')
new_s = original_s[i+1:]
print(new_s)
使用str.partition
和str.rpartition
。
s = "John Doe;Lodging;123;050617"
s.partition(';')[-1].rpartition(';')[0] # Lodging;123
就效率而言,这可能是最好的解决方案。不过,我发现split/join方法更具可读性。
这不会给OP的输出带来希望,“John Doh;”和“; 050617”需要删除。顺便说一句,我没有downvote这 – jacoblaw
@ jacoblaw更新,谢谢 –
test = "John Doe;Lodging;123;050617"
';'.join(test.split(';')[1:-1])
索引两次是没有必要的,你可以使用'[1:-1]' –
s = "John Doe;Lodging;123;050617"
new_s = ';'.join(s.split(';')[1:-1])
这将使new_s = 'Lodging;123'
有,你可以尝试一些方法。最简单的一种是分割字符串和再组装起来:
data = 'John Doe;Lodging;123;050617'
';'.join(data.split(';')[1:-1])
你也可以使用find
和rfind
(如找到,但是从字符串的结尾向后:
data[data.find(';')+1:data.rfind(';')]
还有partition
和rpartition
:
first, sep, remainder = data.partition(';')
middle, sep, final = remainder.rpartition(';')
尝试:
s = "John Doe;Lodging;123;050617"
print(';'.join(s.split(';')[1:-1]))
你想让字符串看起来像什么?这将有助于使这个问题更清楚。你想要什么样的最终结果? –
这里也适用相同的答案。只需拆分,然后加入你想要的。 –
我需要住宿; 123(这将改变,因为这些是来自.txt文件的输入)。然后,我需要分割剩余的子字符串,并分别将每个半字符分别添加到类别和值列表中。 –