2013-12-20 240 views
2

int值如果我有一个urlexamle/def/5/,我试图找到int值从url使用我怎样才能从URL

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

,但我得到一个错误。

Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.7/re.py", line 177, in findall return _compile(pattern, flags).findall(string) File "/usr/lib/python2.7/re.py", line 229, in _compile p = _cache.get(cachekey) TypeError: unhashable type: 'list'

我该怎么做?

+2

什么错误?请分享一个回溯。 – geoffspear

+0

回溯(最近通话最后一个): 文件 “”,1号线,在 文件 “/usr/lib/python2.7/re.py”,线路177,在的findall 回报_compile(图案,旗) .findall(字符串) 文件“/usr/lib/python2.7/re.py”,第229行,在_compile中 p = _cache.get(cachekey) TypeError:不可用类型:'list' –

+1

请更新您的问题跟踪反而放在评论中。 – falsetru

回答

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'] 
+0

好吧,我在[0-9]得到了一点,actully我没有使用“” ...thanx –

+0

Downvoter:我该如何改进答案? – falsetru

+0

我不是downvoter,但我建议你使用'\ d +'来捕获所有的数字不只是单个数字的数字。 –

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) 
0

这样做没有正则表达式的只是用不同的方式。

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