2012-01-24 5 views
4

-2.45과 같이 공백으로 채워진 숫자 요소를 포함하는 행을 일치시키는 정규식을 작성했습니다. 이 정규 표현식은 충분히 간단합니다.고정 길이 청크와 가변 길이 요소를 일치시키는 정규식

/(\s*-?\d+\.\d{2})/ 

그러나 전체 청크가 정확히 7 자로 제한된다는 추가 제한 조건이 있습니다.

/(\s{0,3}-?\d{1,4}\.\d{2})/ 

을하지만이 독립적으로 \d{1,4}\s{0,3} 일치하면 해결책이 아니다, 그래서 모든 것은 어디 덩어리를 일치 수 : 나는 그들의 이론적 인 최대 값 이내에서 선행 공백과 숫자를 제한하는 표현을 수정할 수 있습니다 4에서 11 자로.

전체 그룹을 고정 길이로 제한 할 수있는 방법이 있습니까?

편집 :

/^(fixed length stuff at start of line)(7 char chunk)\s{3}(2nd 7 char chunk)\s{3}(3rd 7 char chunk)$/ 

혼합 : 큰 정규식의 라인을 따라 간다 있도록

, 나는 세 개의 공간으로 구분이 일곱 개 문자 그룹의 3 개 라인을 처리하고있어, 명확히하기 in은 다른 하나의 또는 두 개의 숫자 그룹을 가지고있는 라인들, 프리젠 테이션 쓰레기들, 그리고 다른 것들 (아마도 알 수없는 것들)을 가진 라인들입니다. 그래서 저는 정확히 일치하는 것들을 찾고 있습니다.

+0

아마도 정규 표현식을 사용하게하는 것이 좋을 것입니다. 그런 다음 결과를 7 자만 'right()'또는 'substring()'할 수 있습니다. – ean5533

+0

가장 쉬운 방법은 원래 정규식에서 일치시킨 다음 테스트하여 일치 항목의 'strlen'이 최대 7인지 확인하는 것입니다. –

+0

몇 줄의 예제 라인을 게시하고 일치하고 싶지 않은 부분을 지적 해 주시겠습니까? –

답변

4

당신이 사용할 수있는 lookahead assertion (당신은 괄호가 필요하지 않습니다) :

/(?=[\s\d-]{4}\.\d{2})\s*-?\d+\.\d{2}/ 

당신은 당신이에 따라 7 자 이상 일치하지 않음을 보장하기 위해 정규식 주위에 약간의 앵커를해야 할 수도 있습니다 어떤 숫자가 실제로 \.d{2} 부분 후에 종료하도록 예를

/(?=[\s\d-]{4}\.\d{2}\b)\s*-?\d+\.\d{2}\b/ 

를 들어, 이러한 요소를 구분합니다.

+0

이것이 트릭을 할 것이라고 생각합니다. 감사합니다 .-) –