2017-07-26 23 views
-2

如果给出字符串“John Doe; Lodging; 123; 050617”,这是一个文件内的一行,我需要删除之前的所有内容,包括第一个分号,以及后面和最后一个。我怎么能做到这一点,而不会删除我以后拆分剩余的子字符串的能力?如何删除以前出现的字符串部分;如果字符串中有多个分号?

先前的问题并没有解决一旦分离出去的部分,同时保留进一步使用所需的部分。

+0

你想让字符串看起来像什么?这将有助于使这个问题更清楚。你想要什么样的最终结果? –

+0

这里也适用相同的答案。只需拆分,然后加入你想要的。 –

+0

我需要住宿; 123(这将改变,因为这些是来自.txt文件的输入)。然后,我需要分割剩余的子字符串,并分别将每个半字符分别添加到类别和值列表中。 –

回答

2

逐步为清楚:

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' 
-1

试试这个:使用str.find()功能定位的​​3210第一次出现,然后使用[:]

aStr = "John Doe;Lodging;123;050617" 
aStr = aStr[aStr.find(';')+1:] 
print(aStr) 
Lodging;123;050617 
+0

这不会给OP的输出带来希望,“John Doh;”和“; 050617”需要删除。顺便说一句,我没有downvote这 – jacoblaw

+0

好点,我错过了这个问题的一部分。 OP问题并不明确。 – nanojohn

0

find方法会给你一个字符的第一个实例的索引从点到结束串in a string

original_s="John Doe;Lodging;123;050617" 
idx = original_s.find(';') 
new_s = original_s[i+1:] 
print(new_s) 
0

使用str.partitionstr.rpartition

s = "John Doe;Lodging;123;050617" 
s.partition(';')[-1].rpartition(';')[0] # Lodging;123 

就效率而言,这可能是最好的解决方案。不过,我发现split/join方法更具可读性。

+0

这不会给OP的输出带来希望,“John Doh;”和“; 050617”需要删除。顺便说一句,我没有downvote这 – jacoblaw

+0

@ jacoblaw更新,谢谢 –

2
test = "John Doe;Lodging;123;050617" 
';'.join(test.split(';')[1:-1]) 
+4

索引两次是没有必要的,你可以使用'[1:-1]' –

2
s = "John Doe;Lodging;123;050617" 
new_s = ';'.join(s.split(';')[1:-1]) 

这将使new_s = 'Lodging;123'

0

有,你可以尝试一些方法。最简单的一种是分割字符串和再组装起来:

data = 'John Doe;Lodging;123;050617' 
';'.join(data.split(';')[1:-1]) 

你也可以使用findrfind(如找到,但是从字符串的结尾向后:

data[data.find(';')+1:data.rfind(';')] 

还有partitionrpartition

first, sep, remainder = data.partition(';') 
middle, sep, final = remainder.rpartition(';') 
0

尝试:

s = "John Doe;Lodging;123;050617" 
print(';'.join(s.split(';')[1:-1])) 
相关问题