web-dev-qa-db-fra.com

comment obtenir la dernière partie d'une chaîne avant un certain caractère?

J'essaie d'imprimer la dernière partie d'une chaîne avant un certain caractère. 

Je ne sais pas trop s'il faut utiliser la méthode string .split (), le découpage en chaîne ou peut-être autre chose. 

Voici un code qui ne fonctionne pas, mais je pense montre la logique: 

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

Notez que la taille du nombre à la fin variera donc je ne peux pas définir un nombre exact à partir de la fin de la chaîne. 

48
user1063287

Vous recherchez str.rsplit() , avec une limite:

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

.rsplit() recherche la chaîne de fractionnement à partir de la fin de la chaîne d'entrée et le deuxième argument limite le nombre de fois qu'il sera divisé en une seule fois. 

Une autre option consiste à utiliser str.rpartition() , qui ne sera jamais divisé qu'une seule fois:

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

str.rpartition() est également la méthode la plus rapide pour diviser une seule fois; si vous devez diviser plusieurs fois, vous ne pouvez utiliser que str.rsplit().

Démo:

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

et la même chose avec str.rpartition()

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

La différence entresplitetpartitionest scindée retourne la liste sans délimiteur et sera scindée à chaque fois qu'il obtiendra un délimiteur dans la chaîne i.e. 

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

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

etpartitiondivisera la chaîne avec seulement first delimiter et ne renverra que 3 valeurs dans la liste 

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

donc, comme vous voulez la dernière valeur, vous pouvez utiliserrpartitioncela fonctionne de la même manière mais le délimiteur sera trouvé à partir de la fin de la chaîne

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