1

Python正規表現に問題があります。結果は regxe buddy では問題ないように見えますが、python では失敗します。

私が一致しなければならないデータのセットはリストです:

['  101  0.  0.\n',
 '  0.  100.\n',
 '  1.  98.5107805\n',
 '  2.  97.0464459\n',
 '  3.  95.6065328\n', ... ]

2行目から始まるすべての数字を取得する必要があります。このために私は使用しました:

pattern = compile(r'\s*(?P<raw_time>\d*\.?\d*)\s+(?P<raw_value>\d*\.\d*)')

そして、すべてうまくいきました。リストを繰り返し処理し、すべての行の最初の値を「raw_time」で取得し、2 番目の値を「raw_value」で取得します。次に、加重データでも機能するように用語を拡張することになっていました。

したがって、データは次のようになりました。

['  101  0.  0.\n',
 '  0.  100.  1\n',
 '  1.  98.5107805  1\n',
 '  2.  97.0464459  1\n',
 '  3.  95.6065328  1\n', ... ]

最初の 2 つのパラメーターを解析する必要があります。だから私はパターンを次のように変更しました:

pattern = compile(r'\s*(?P<raw_time>\d*\.?\d*)\s+(?P<raw_value>\d*\.\d*).+')

1を除くすべての行で正常に動作します。

働く:

In [35]: pattern.search('1.  98.5107805  1\n').groupdict()
Out[35]: {'raw_time': '1.', 'raw_value': '98.5107805'}

働く:

In [37]: pattern.search('  0.  100.  1\n').groupdict()
Out[37]: {'raw_time': '0.', 'raw_value': '100.'}

働く:

[44]: pattern.search('1.98.5107805\n').groupdict() アウト[44]: {'raw_time': '1.', 'raw_value': '98.510780'}

動作していません:

In [46]: pattern.search('  0.  100.\n').groupdict()
Out[46]: {'raw_time': '', 'raw_value': '0.'}

私は正規表現に大きく依存しています (確かにデモですが、今までは python と一貫していました)。

アドバイス?

tnx

4

1 に答える 1

2

追加した.+ものをに変更する必要があります.*

+演算子には少なくとも1文字が必要ですが、*0個以上を受け入れます。

于 2012-05-25T07:55:53.627 に答える