숫자 분리와 관련된 정규식 개선

숫자 분리와 관련된 정규식 개선

암호

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

관련 정보