2013-04-06 3 views
43

Я пытаюсь напечатать последнюю часть строки перед определенным символом.как получить последнюю часть строки перед определенным символом?

Я не совсем уверен, следует ли использовать метод .split() или строчную нарезку строки или, возможно, что-то еще.

Вот код, который не работает, но я думаю, что показывает логика:

x = 'http://test.com/lalala-134' 
print x['-':0] # beginning at the end of the string, return everything before '-' 

Обратите внимание, что число в конце будет различаться по размеру, так что я не могу установить точное число с конца строки.

ответ

81

Вы ищете str.rsplit(), с лимитом:

print x.rsplit('-', 1)[0] 

.rsplit() ищет расщепления строки с конца входной строки, а второй аргумент ограничивает, сколько раз он будет разделить только один раз.

Другой вариант заключается в использовании str.rpartition(), который будет только когда-либо разделить только один раз:

print x.rpartition('-')[0] 

Для расщепления только один раз, str.rpartition() является быстрым методом, а также; если вам нужно разделить более одного раза, вы можете использовать только str.rsplit().

Демо:

>>> x = 'http://test.com/lalala-134' 
>>> print x.rsplit('-', 1)[0] 
http://test.com/lalala 
>>> 'something-with-a-lot-of-dashes'.rsplit('-', 1)[0] 
'something-with-a-lot-of' 

и то же самое с str.rpartition()

>>> print x.rpartition('-')[0] 
http://test.com/lalala 
>>> 'something-with-a-lot-of-dashes'.rpartition('-')[0] 
'something-with-a-lot-of' 
+0

большое спасибо, я использовал 'печать x.rsplit («-», 1) [1]' и он работал, спасибо , я также просто наткнулся на 'print x.rpartition ('-') [2]', и это, похоже, тоже работает! еще раз спасибо! – user1063287

+2

Правильно, ваша формулировка была немного двусмысленной; вы просили * последнюю часть строки ** перед ** определенным символом *; вы подразумевали после, я думаю. :-) –

+0

но мои замечательные комментарии! «Начиная с конца строки», я понимаю, что вы имеете в виду ха-ха. – user1063287

0

Разница между расколоть и раздел расщепляется возвращает список без разделителем и разделится где когда-либо он получает разделитель в строке т.е.

x = ' http://test.com/lalala-134-431 '

a,b,c = x.split(-) print(a) " http://test.com/lalala " print(b) "134" print(c) "431"

и раздела будет делить строку только с первого разделителем и будет возвращать только 3 значения в списке

x = ' http://test.com/lalala-134-431 ' a,b,c = x.partition('-') print(a) " http://test.com/lalala " print(b) "-" print(c) "134-431"

так, как вы хотите, последнее значение, вы можете использовать rpartition он работает таким же образом, но он будет найти разделитель с конца строки

x = ' http://test.com/lalala-134-431 ' a,b,c = x.partition('-') print(a) " http://test.com/lalala-134 " print(b) "-" print(c) "431"

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