2013-05-06 4 views
2

Каков наилучший способ удалить последний бит строки, следуя определенному признанному шаблону? Например:Замена последней части строки после шаблона

s = 'some Strings-and-stuff - SomeOther Strings-and-stuff - TAke.THis last -part away.txt'

вернется:

'some Strings-and-stuff - SomeOther Strings-and-stuff'

при работе на некоторой функции, которая выглядит для шаблона «-» и удаляет последнюю строку после последней ' - ' происходит.

EDIT: Ответ был дан, чтобы быть:

new_string = ' - '.join(s.split(' - ')[0:-1]) 

Другие вещи, которые я пробовал:

>>> re.sub(r'(.*) - ', '', s[::-1])[::-1] 
'some Strings-and-stuff' 

Используя предложенную .split() функцию, я могу получить выход этим:

>>> p = s.split(' - ') 
>>> p.pop() 
'TAke.THis last -part away.txt' 
>>> ' - '.join(p) 
'some Strings-and-stuff - SomeOther Strings-and-stuff' 

Это работает, но другой предложенный ответ - лучший способ избавиться от не одного лайнера pop() или del функции.

+1

Split по " - ", удалите последнюю часть и разрушите остальные. – HamZa

+0

Как распознается начальная часть строки? – Ewan

+0

Он действительно хочет две из этих частей после того, как дефис будет удален. @chase Я предполагаю, что вам нужно будет указать, какой шаблон вы хотите удалить, чтобы я предложил вам регулярное выражение. –

ответ

2

Это даст вам желаемый результат в одной строке:

s = " - ".join(s.split(' - ')[:-1]) 
+0

Спасибо @AlagappanRamu, это отличный ответ и именно то, что мне нужно. – chase

2

вы хотите использовать раскол для этого!

In [130]: s = 'some Strings-and-stuff - SomeOther Strings-and-stuff - TAke.THis last -part away.txt' 

In [131]: s.split(" - ")[0:-1] 
Out[131]: ['some Strings-and-stuff', 'SomeOther Strings-and-stuff'] 

когда вы расщеплены «-» он будет возвращать список, который имеет элементы, которые были бы разделены в строке с помощью «-».

Затем индекс первого пункта до последнего пункта, поэтому есть [0:-1] после раскола

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