В вашем случае вы, вероятно, захотите rpartition :
s1 = "text-23"
s2 = "the-text-9"
s3 = "2011-is-going-to-be-cool-455"
#If you want the final number...
print s1.rpartition("-")[2]
#23
#If you want to strip the final number and dash...
print s2.rpartition("-")[0]
#the-text
#And showing the full output...
# - Note that it keeps the rest of your string together, unlike split("-")
print s3.rpartition("-")
#('2011-is-going-to-be-cool', '-', '455')
Я думаю, что это немного чище, чем split("-", 1)
, поскольку это именно то, что вы хотите делать Выходы почти идентичны, за исключением того, что вывод rpartition включает разделитель.
И я просто посмотрел, и rpartition немного быстрее ...
import timeit
print timeit.Timer("'2011-is-going-to-be-cool-455'.rsplit('-', 1)").timeit()
#1.57374787331
print timeit.Timer("'2011-is-going-to-be-cool-455'.rpartition('-')").timeit()
#1.40013813972
print timeit.Timer("'text-23'.rsplit('-', 1)").timeit()
#1.55314087868
print timeit.Timer("'text-23'.rpartition('-')").timeit()
#1.33835101128
print timeit.Timer("''.rsplit('-', 1)").timeit()
#1.3037071228
print timeit.Timer("''.rpartition('-')").timeit()
#1.20357298851