Удалить последнюю косую черту и число в строке в Python - PullRequest
0 голосов
/ 17 января 2011

У меня есть такие строки:

текст-23

-текст-9

2011-это-происходит-к-быть-круто-455

Мне нужно удалить последний-номер из строки в Python (и я ужасен с регулярными выражениями).

Спасибо за вашу помощь!

Ответы [ 5 ]

5 голосов
/ 17 января 2011

при условии, что весь ваш текст заканчивается на -number

>>> s="2011-is-going-to-be-cool-455"
>>> s.rsplit("-",1)[0]
'2011-is-going-to-be-cool'

или

>>> iwant=s.rsplit("-",1)
>>> if iwant[-1].isdigit():
...   print iwant[0]
...
2011-is-going-to-be-cool
4 голосов
/ 17 января 2011
'2011-is-going-to-be-cool-455'.rstrip('0123456789-')
3 голосов
/ 17 января 2011

Попробуйте это:

str = re.sub(r'-[0-9]+$', '', str)
2 голосов
/ 17 января 2011

В вашем случае вы, вероятно, захотите 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
0 голосов
/ 17 января 2011

Я думаю, что метод .rsplit (), предложенный @ ghostdog74, лучше;тем не менее, вот еще один вариант:

for s in myStrings:
    offs = s.rfind('-')
    s = s if offs==-1 else s[:offs]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...