2013-10-28 83 views
0

我有下面的腳本,它基本上刪除了「 - 」後面的句子,當announce.txt包含下面的輸入時,它會中斷,因爲它有多個「 - 」 ,我基本上想分裂基於第一個「 - 」從最後..請點擊 建議如何做到這一點...我有hte預期輸出根據最後一行中的第一個「 - 」進行分割

INPUT: - //components/rel/bt.wcnss/ 2.4/wcnss_proc/bt/platform/rom/inc/oi_sbc_tables-generated.h#1 - 分支更改700801(文本)

預期的輸出: - //components/rel/bt.wcnss/2.4/wcnss_proc/bt/ platform/rom/inc/oi_sbc_tables-generated.h#1

f = open('announce.txt', 'r') 
z = f.readlines() 
f.close() 

k = [] 

for items in z: 
    print 'Current item %s'%items 
    answer = items.split('-'); 
    k.append(answer[0].strip() + '\n') 

f2 = open('foobar4.txt', 'w') 
f2.writelines(k) 
f2.close() 

回答

1

rsplit

"a-b-c-d".rsplit('-',1) 

>>> ['a-b-c', 'd'] 

-

items = '- //components/rel/bt.wcnss/2.4/wcnss_proc/bt/platform/rom/inc/oi_sbc_tables-generated.h#1 - branch change 700801 (text)' 
answer = items.rsplit('-',1); 
k.append(answer[0].strip() + '\n') 
# print answer[0].strip() 
+0

哈,我知道'rfind'和'rindex',而不是右側'分裂'雙。顯然是正確的答案。 –

+0

Python很棒:) – furas

1

rfind是你的朋友。

>>> input = '- //components/rel/bt.wcnss/2.4/wcnss_proc/bt/platform/rom/inc/oi_sbc_tables-generated.h#1 - branch change 700801 (text)' 
>>> output = input[:input.rfind('-')] 
>>> print output 
- //components/rel/bt.wcnss/2.4/wcnss_proc/bt/platform/rom/inc/oi_sbc_tables-generated.h#1 

已知的BUG:

  • 如果你沒有這樣的「註釋字符串」,它會高興地砍在其他地方(例如,在tables-generated
  • 如果字符串沒有破折號可言,它將截斷由1個字符的輸入(切片將input[:-1]
+0

可以爲您建議改變我的腳本 – user2909312

1

如何貪婪正則表達式:

import re 
original_string = u'//components/rel/bt.wcnss/2.4/wcnss_proc/bt/platform/rom/inc/oi_sbc_tables-generated.h#1 - branch change 700801 (text)' 
match = re.match(r'(.*)-', original_string).groups() 
if match: 
    new_string = match.groups()[0] 
相關問題