2016-09-16 17 views
-1

に私は、文字列、私はちょうど例えばAD6で0.02のような各「AD」の値を読みたい読む文字列は、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] 

にいくつかの値を持っています。文字列は毎回変わるので、 'substring'は使用できません。ここで

は私のコードです

while True: 

    data = ser.read(9999) 

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

誰かが、私は、各ADの値を抽出し、変数にそれを置くことができる方法についてのアイデアを持っていますか? (ループはあります)。

答えて

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

、あなたがより良い内float()を使用してfloat型にマッチしたグループをイテレータのようなオブジェクトを返しますfinditer()を使用して変換するのに浮くように値を変換したい場合リスト内包:

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}'がより良い回答かもしれません –

関連する問題