2010-01-19 83 views
4

我想从字符串中提取值,我试图让re.match工作,但没有任何运气。该字符串是:从字符串中提取值

'/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 

我曾尝试:

map(int,re.search("Value\s*=\s*").group(1)) 

也:

'/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n'.split(' = ') 

我不知道还有什么可以添加或做。我想要检索'Value, Max, Step'及其值的属性。无论如何要做到这一点?

感谢所有帮助

回答

6

对于特别字符串,下面解析成一个字典:

s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 
d = {} 
for pair in [val.split('=') for val in s.split('\r\n')[1:-1]]: 
    d[pair[0]] = int(pair[1]) 
3
>>> s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 
>>> bits = s.split('\r\n') 
>>> val, max_val, step = [int(bits[i].partition(' = ')[2]) for i in [1, 3, 4]] 
>>> val 
1800 
>>> max_val 
3600 
>>> step 
1 
0
s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 
data = {} 

for l in s.split('\r\n'): 
    if " = " in l: 
      k,v = l.split(" = ") 
      data[k] = int(v) 

print data 
0

您要使用正则表达式,但我认为您可以简单地将它拆分为\r\n,然后使用=的值。

喜欢的东西:

s = '/opt/ad/bin$ ./ptzflip\r\nValue = 1800\r\nMin = 0\r\nMax = 3600\r\nStep = 1\r\n' 
dct = {} 
arr = [ss for ss in s.split('\r\n') if '=' in ss] 
for e in arr: 
    k, v = e.split(' = ') 
    dct[k] = v 
print dct