さまざまなフォーマットを持つことができるデータ文字列があるとします。名目上、文字列内のデータはスペースで区切られますが、常にそうであるとは限らないため.split(' ')
、この場合、単純なデータは機能しません。
文字列の例は次のとおりです。
string = '2012 05 06 04:20:00.0500 FOOBAR 4.7E+10 -55 33.0 555~2767 B 12 \r\n'
指数を含めることができる必要なすべての数値を取得するには、-、+、または〜で始めるか、それらを区切るスペースを入れないでください。
re.findall(r'[~+-]?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?', string)
# giving the result;
['2012', '05', '06', '04', '20', '00.0500', '4.7E+10', '-55', '33.0', '555', '~2767', '12']
また、文字列から1文字(この場合B
)だけが必要です。この単一の文字はB、F、またはOのいずれかであり、次FOOBAR
を使用してこれを取得し、文字列内で回避することができます。
re.findall(r'((?:(?:\b))[FBO]\b)', string)
# giving the result:
['B']
しかし、私が必要としているのは、上記の2つの結果を組み合わせた結果を取得することです。いつでも2番目の結果をリストに追加できますが、対応するリスト内の結果の位置を、元の文字列に存在する順序で表示したいと思いますstring
。つまり、次のようなリストが必要です。
['2012', '05', '06', '04', '20', '00.0500', '4.7E+10', '-55', '33.0', '555', '~2767', 'B', '12']
何か案は?それとももっと良い方法はありますか?