数値分離に関する正規表現の改善

数値分離に関する正規表現の改善

パスワード

m/([+-]?\d+\.\d+)[\s\t]+([+-]?\d+\.\d+)/

データ

22.585698    3601.767090     D:\measurements\LabCourse_2015\6\90deg\image0001_23_mT.png
20.051883    3580.268555     D:\measurements\LabCourse_2015\6\90deg\image0002_20_mT.png
17.587862    3550.807617     D:\measurements\LabCourse_2015\6\90deg\image0003_18_mT.png

このコードは2桁の数字の行で動作するようです。しかし、そうでなければうまく書かれているかどうかはわかりません。読みにくいです。

この正規表現をどのように改善できますか?

答え1

あなたの結果に基づいて正規表現を改善するためのいくつかのことを提供しました。

  • 以下を使用して、行の先頭で明示的に一致させることができます。^
  • 一致するグループを使用しない場合は、角かっこが不要であるか、非キャプチャグループを使用してください。?:
  • \s含まれて\tいるので\s

最終正規表現は次のとおりです。m/^(?:[+-]?\d+\.\d+)\s+(?:[+-]?\d+\.\d+)/

答え2

ASCII スペースで区切られた小数部を持つ 2 つのオプションの符号付き数字で始まる行と一致します。最適で明確に見えます。

答え3

追加したい最適化cuonglmの提案、正規表現をより簡単に維持するための場合:

m/^(?:[-+]?\d+\.\d+\s+){2}/

これにより、正規表現の追加最適化を一箇所に集中できます。

また、数値が正しい10進数であることがわかっている場合(たとえば、データに一連の数字に複数の小数点が含まれていない場合):

m/^(?:[-+]?[\d.]+\s+){2}/

関連情報