암호
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}/