如何从字符串末尾提取数字

4

我有一个字符串,格式如下:"Titile Something/17"。我需要将其中的"/NNN"部分切除,该部分可能是3、2或1位数字,或者可能不存在。

你可以用Python怎样实现这个功能?谢谢。


请提供一个您已经尝试过的示例。 - David Watts
交易是你向我们展示你尝试过的代码以及如何解决问题的方法,SO不是一个代码编写服务。 - EdChum
@EdChum从未考虑过让别人为我编写代码,但是一个代码示例-反馈非常有帮助。 - Croll
4个回答

4
你不需要使用正则表达式,只需使用内置的str.rindex函数和切片即可,例如:
>>> data = "Titile Something/17"
>>> data[:data.rindex("/")]
'Titile Something'
>>> data[data.rindex("/") + 1:]
'17'

或者你可以使用 str.rpartition,像这样

>>> data.rpartition('/')[0]
'Titile Something'
>>> data.rpartition('/')[2]
'17'
>>> 

注意: 这将获取最后一个 / 后的任何字符串。请谨慎使用。

如果您想确保拆分的字符串实际上是由数字组成的,您可以使用 str.isdigit 函数,像这样

>>> data[data.rindex("/") + 1:].isdigit()
True
>>> data.rpartition('/')[2].isdigit()
True

3

\d{0,3}匹配零到三个数字。 $断言我们位于行末。

re.search(r'/\d{0,3}$', st).group()

例子:

>>> re.search(r'/\d{0,3}$', 'Titile Something/17').group()
'/17'
>>> re.search(r'/\d{0,3}$', 'Titile Something/1').group()
'/1'

不错,但不太易读 :) thefourtheye 的示例更好,你觉得呢? - Croll
@DmitrijA的示例也适用于输入“Titile Something/foo”。但我认为您想要最后一部分,其中包含零个或最多三个数字。 - Avinash Raj
是的,你在这里是正确的。但如果没有数字,也就没有斜杠。因此,在调用.group()之前,我必须检查结果不是None - Croll
我认为你可以轻松地检查re.search是否返回匹配对象。 - Avinash Raj

2
data = "Titile Something/17"

print data.split("/")[0]
'Titile Something' 
print data.split("/")[-1] #last part string after separator /
'17'

或者

print data.split("/")[1] # next part after separator in this case this is the same
'17'

当您添加此项至列表时,请使用 strip() 去除换行符 "\n"。
print data.split("/")[-1].strip()
'17'

~


感谢您的输入并欢迎。但是,split()返回由/分隔的项目数组,这不完全符合我的任务要求。 - Croll

1
我需要切掉 "/NNN"。
x = "Titile Something/17"
print re.sub(r"/.*$","",x)   #cuts the part after /
print re.sub(r"^.*?/","",x)  #cuts the part before /

使用 re.sub 可以实现你想要的功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接