2013-07-26 7 views
9

Как бы удалить все после определенного символа строки в python? Например, у меня есть строка, содержащая путь к файлу и некоторые дополнительные символы. Как я могу удалить все после .zip? Я пробовал rsplit и split, но ни один из них не включал .zip при удалении дополнительных символов.Как удалить все после определенного символа в строке?

Любые предложения?

+0

возможно дубликат (http://stackoverflow.com/questions/904746/how -to-remove-all-characters-after-a-specific-character-in-python) –

ответ

13

Просто взять первую часть раскола, и добавить '.zip' обратно:

s = 'test.zip.zyz' 
s = s.split('.zip', 1)[0] + '.zip' 

В качестве альтернативы вы можете использовать нарезку, вот решение, в котором вам не нужно добавить '.zip' назад в результат (4 происходит от len('.zip')):

s = s[:s.index('.zip')+4] 

Или другой вариант с регулярными выражениями:

import re 
s = re.match(r'^.*?\.zip', s).group(0) 
4

Используйте ломтиков:

s = 'test.zip.xyz' 
s[:s.index('.zip') + len('.zip')] 
=> 'test.zip' 

и легко упаковать выше в маленькой вспомогательной функции:

def removeAfter(string, suffix): 
    return string[:string.index(suffix) + len(suffix)] 

removeAfter('test.zip.xyz', '.zip') 
=> 'test.zip' 
1

Вы можете использовать re модуль:

import re 
re.sub('\.zip.*','.zip','test.zip.blah') 
11

str.partition :

>>> s='abc.zip.blech' 
>>> ''.join(s.partition('.zip')[0:2]) 
'abc.zip' 
>>> s='abc.zip' 
>>> ''.join(s.partition('.zip')[0:2]) 
'abc.zip' 
>>> s='abc.py' 
>>> ''.join(s.partition('.zip')[0:2]) 
'abc.py' 
1

Я думаю, что для этого легко создать простую лямбда-функцию.

mystrip = lambda s, ss: s[:s.index(ss) + len(ss)] 

Может использоваться как это: [? Как удалить все символы после определенного символа в питоне]

mystr = "this should stay.zipand this should be removed." 
mystrip(mystr, ".zip") # 'this should stay.zip' 
+0

Разве это не просто ответ Оскара Лопеса? Я также не уверен, что вижу смысл использования «лямбды», если вы сразу же дадите ему имя. – DSM

+0

Вы правы, но ответы быстро появились, и я не обновил страницу до публикации. F.J также имеет аналогичный ответ. – joente

Смежные вопросы