如何从url获取int值

时间:2013-12-20 13:47:12

标签: python regex python-2.7

如果我有url examle/def/5/,我尝试使用

int中找到url
re.findall([0-9],'examle/def/5/')

但是我收到了错误。

  

Traceback(最近一次调用最后一次):文件“”,第1行,in   在findall返回文件“/usr/lib/python2.7/re.py”,第177行   _compile(pattern,flags).findall(string)文件“/usr/lib/python2.7/re.py”,第229行,在_compile中p =   _cache.get(cachekey)TypeError:unhashable type:'list'

我该怎么做?

3 个答案:

答案 0 :(得分:8)

确保导入re

>>> import re

将第一个参数作为字符串对象传递。 (引号[0-9]没有等同于[-9]的列表文字。)

>>> re.findall('[0-9]','examle/def/5/')
['5']

顺便说一句,您可以使用\d代替[0-9]来匹配数字(使用r'raw string'您无需转义\):

>>> re.findall(r'\d','examle/def/5/')
['5']
>>> re.findall(r'\d','examle/def/567/')
['5', '6', '7']

如果您想要返回单个数字而不是多个数字,请使用\d+

>>> re.findall(r'\d+','examle/def/567/')
['567']

答案 1 :(得分:1)

使用“正则表达式”

可能很容易

虽然它很强大但它也很危险

我不知道你的确切要求,

如果你想从uri中的任何位置提取数字,是的,建议的解决方案是有效的

>>> re.findall('[0-9]','examle/def/5/')
['5']

但我想你想从uri的“固定地方”获得数字。 如果是,您可能不希望这个结果

>>> re.findall('[0-9]','examle5/def/5/')
['5', '5']

我相信你可以修改正则表达式模式来完成这个,但是我会尽量避免正则表达式,因此我会这样做

>>> 'examle5/def/5/'.split('/')[-2]
'5'

如果你想使用提取的值,那么

try:
    int('examle5/def/5/'.split('/')[-2])   =>> will produce 5 (without quotes)
except ValueError:
    <<your code to handle when integer not present in url)

答案 2 :(得分:0)

在没有正则表达式的情况下采用不同的方式。

 from string import digits
 url = 'examle/def/5/'
 nums = [i for i in list(url) if i in list(digits)]
 return "".join(nums)