改进有关数字分隔的正则表达式

改进有关数字分隔的正则表达式

代码

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

此代码似乎适用于有两位数的行。但是,我不确定否则是否写得好。很难阅读。

如何改进这个正则表达式?

答案1

根据您的输出,我提供了一些改进您的正则表达式的要点:

  • 您可以在行首显式匹配,使用^
  • 如果您不使用匹配组,则不需要括号或使用非捕获组?:
  • \s包括\t,所以你只需要\s.

最终的正则表达式可以是m/^(?:[+-]?\d+\.\d+)\s+(?:[+-]?\d+\.\d+)/

答案2

它匹配以两个可选带小数部分的有符号数字开头的行,所述数字由 ascii 空格分隔。它看起来是最佳且清晰的。

答案3

我要添加的优化cuonglm的建议,如果只是为了使正则表达式更易于维护:

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

这样,您就可以将对正则表达式的任何进一步优化集中在一处。

另外,如果您知道这些数字是正确的十进制数字(即您的数据在一串数字中不包含多个小数点):

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

相关内容