2016-09-16 31 views
-1

我有一个字符串读字符串在Python

[AD6:0.02] [AD7:0.03] [AD8:0.19][AD3:6][AD0:22][AD1:22][AD4:48.00][AD5:0.01] [AD6:0.03] 

我只是想读AD6每个“AD”像0.02例如值有一些价值。字符串每次都会改变,所以我不能使用'substring'。

这里是我的代码

while True: 

    data = ser.read(9999) 

    for x in data: 
     if ((x==':') & (x+1=='0')): 
      print 'Achou' 

是否有人有我如何可以提取每个广告的价值,并把它放在一个变量的想法? (在循环中)。

回答

3

使用re.findall()用适当的正则表达式:

In [80]: s = "[AD6:0.02] [AD7:0.03] [AD8:0.19][AD3:6][AD0:22][AD1:22][AD4:48.00][AD5:0.01] [AD6:0.03]" 

In [81]: regex = re.compile(r'AD\d:([\d.]+)') 

In [82]: regex.findall(s) 
Out[82]: ['0.02', '0.03', '0.19', '6', '22', '22', '48.00', '0.01', '0.03'] 

如果你要转换的值浮动,你最好使用finditer()返回一个迭代器类对象和转换匹配组使用float()内浮动列表理解:

In [85]: [float(x.group(1)) for x in regex.finditer(s)] 
Out[85]: [0.02, 0.03, 0.19, 6.0, 22.0, 22.0, 48.0, 0.01, 0.03] 

但是请注意,这可能会引发一个ValueError如果您的号码是无效的数字。在这种情况下,您最好使用常规循环,并使用try-except表达式处理异常。

+0

不错,但这个数值不是静态的,更清晰,这是你知道的温度和湿度?你认为这会起作用吗? –

+1

@FelipeFerreiraMendes为什么这么重要?如果你的字符串是你给出的格式,那么这个答案显示了如何提取你要求的值 –

+0

虽然看到'{'AD6':0.02}'可能是更好的答案 –