代码
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}/