2013-04-06 11 views
43

Próbuję wydrukować ostatnią część ciągu przed określoną postacią.jak zdobyć ostatnią część ciągu przed określoną postacią?

Nie jestem do końca pewien, czy użyć metody string .split() lub przecinania struny, czy może czegoś innego.

Oto kod, który nie działa, ale myślę, że pokazuje logika:

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

pamiętać, że liczba na koniec będzie różnić się wielkością, więc nie mogę ustawić dokładną liczbę od końca ciągu.

Odpowiedz

81

Szukasz str.rsplit(), z limitem:

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

.rsplit() wyszukuje ciąg rozłupywania od końca ciągu wejściowego, a drugie limity argumentów, ile razy będzie ona rozdzielone tylko raz.

Inną opcją jest użycie str.rpartition(), który będzie zawsze tylko podzielić tylko raz:

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

do dzielenia tylko raz, str.rpartition() jest szybsza metoda, jak również; Jeśli chcesz podzielić więcej niż jeden raz, możesz użyć tylko str.rsplit().

Demo:

>>> 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' 

i to samo z str.rpartition()

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

dziękuję bardzo, użyłem 'x.rsplit print („-”, 1) [1]' i to zadziałało, dziękuję . natknąłem się także na 'print x.rpartition ('-') [2]' i to też zadziałało! dzięki jeszcze raz! – user1063287

+2

Dobrze, twoje sformułowanie było trochę niejednoznaczne; prosiłeś o * ostatnią część ciągu ** przed ** pewną postacią *; miałeś na myśli po, jak sądzę. :-) –

+0

ale moje wspaniałe komentarze! "początek na końcu struny", widzę, co masz na myśli haha. – user1063287

0

Różnica między podzielić i partycja jest podzielony zwraca listę bez separatora i podzieli gdzie zawsze robi się separator w ciąg tj

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

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

i partycji podzieli ciąg tylko pierwszej separatora i powróci tylko 3 wartości w liście

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

tak jak chcesz ostatnia wartość można użyć rpartition działa w taki sam sposób, ale znajdzie ogranicznika od końca łańcucha

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

Powiązane problemy