長さと値が異なる出力があり、そこから値を抽出したいと考えています。
これは私の出力です:
'+CPBR: 1,"111",129,"0|2|XX"^M'
この場合、「XX」を抽出したいのですが、
ただし、値が次の場合は「9X」を抽出します。
'+CPBR: 1,"111",129,"01|2|9X"^M'
これを行う良い方法を知っている人はいますか?
長さと値が異なる出力があり、そこから値を抽出したいと考えています。
これは私の出力です:
'+CPBR: 1,"111",129,"0|2|XX"^M'
この場合、「XX」を抽出したいのですが、
ただし、値が次の場合は「9X」を抽出します。
'+CPBR: 1,"111",129,"01|2|9X"^M'
これを行う良い方法を知っている人はいますか?
In [2]: a=r'+CPBR: 1,"111",129,"0|2|XX"^M'
In [3]: b=r'+CPBR: 1,"111",129,"01|2|9X"^M'
In [4]: a.split('|')[-1][0:2]
Out[4]: 'XX'
In [5]: b.split('|')[-1][0:2]
Out[5]: '9X'
次のような正規表現を使用できます。
>>> string = '+CPBR: 1,"111",129,"0|2|XX"^M'
>>> import re
>>> re.search('\|([^|"]+)"',string).group(1)
'XX'
>>> string = '+CPBR: 1,"111",129,"0|2|9X"^M'
'9X'
>>> string = '+CPBR: 1,"111",129,"0|2|ABC"^M'
'ABC'
これは | の間のすべてに一致します。および " はどちらの文字も含まない (|")。