2013-04-06 21 views
43

Dizenin son bölümünü belirli bir karakterden önce yazdırmaya çalışıyorum.Belirli bir karakterden önce bir dizenin son bölümünü nasıl alabilirim?

.split() yöntemi veya dize dilimleme veya başka bir şey kullanıp kullanmayacağından emin değilim. Ben ucundan tam bir sayı ayarlayamıyor böylece sonunda sayı boyutu değişebilir edeceğini

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

Not: mantık gösterir İşte

çalışmıyor bazı kod ama bence dizenin

cevap

81

Bir limitli, str.rsplit() arıyoruz:

giriş dizenin sonundaki bölme dize için
print x.rsplit('-', 1)[0] 

.rsplit() arar ve sadece bir kez için ayıracağız kaç kez ikinci argüman sınırlar.

Başka bir seçenek sadece hiç bir kez bölecek str.rpartition(), kullanmaktır: bölme için

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

sadece bir kez, str.rpartition() yanı daha hızlı bir yöntemdir; Birden fazla kez ayrılmanız gerekirse, sadece str.rsplit()'u kullanabilirsiniz.

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' 

ve bölünmüş sınırlayıcı olmadan liste döndürür ve bölecek str.rpartition()

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

çok teşekkür ederim, ben 'kullanılan basılı x.rsplit dizenin sonundaki ayırıcı bulacaksınız ('-', 1) [1]' ve işe yaradı, teşekkür ederim . Ben de sadece print x.rpartition ('-') [2] 'ye rastladım ve bu da işe yaradı! Tekrar teşekkürler! – user1063287

+2

Doğru, ifadeleriniz biraz belirsizdi; Bir dizinin son kısmı için ** istediniz ** önce ** belli bir karakter *; sonra demek istedin sanırım. :-) –

+0

ama harika yorumlarım! 'dizenin sonunda başlar', ne demek istediğini anladım haha. – user1063287

0

Fark bölüm bölünmüş ila ile aynı nerede

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

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

ve bölüm yani dizede sınırlayıcı alır şimdiye sadece ilk sınırlayıcısıyla dize böler ve son değer rpartition kullanabilirsiniz istediğiniz kadar sadece

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

yüzden listede 3 değerlerini döndürür aynı şekilde çalışır ancak

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

İlgili konular