2013-10-28 70 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] 
相关问题