在Python中删除字符串中的最后斜杠和数字

时间:2011-01-17 04:50:36

标签: python regex string

我有这样的字符串:

文本-23

的文本-9

2011-被持续到待冷却455

我需要从Python中删除字符串中的最后一个数字(我对正则表达式很糟糕)。

感谢您的帮助!

5 个答案:

答案 0 :(得分:5)

假设您所有的文字都以-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

答案 1 :(得分:4)

'2011-is-going-to-be-cool-455'.rstrip('0123456789-')

答案 2 :(得分:3)

试试这个:

str = re.sub(r'-[0-9]+$', '', str)

答案 3 :(得分:2)

在您的情况下,您可能需要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的输出包括分隔符。

而且,只是为了踢,我看了一眼,分区的速度稍快......

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

答案 4 :(得分:0)

我认为@ ghostdog74建议的.rsplit()方法是最好的;但是,这是另一种选择:

for s in myStrings:
    offs = s.rfind('-')
    s = s if offs==-1 else s[:offs]