2017-07-26 22 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])) 
相關問題