2013-12-19 2 views
-1

, 나는이 문자열을 분할 및 배열에 결과 문자열을 저장해야나는 다음과 같은 문자열이 패턴 일치

9.2 20268 pat 6.0 24977 pat 4.0 21222 pat 3.9 20854 pat 

에 문자열을 분할하는 방법.

결과 문자열은 같을 것이다 다음

9.2 20268 pat 
6.0 24977 pat 
4.0 21222 pat 
3.9 20854 pat 

사람이 나를 도울 수 제발?

+2

아직 시도가 있습니까? – Jerry

답변

6

당신은 분할이 정규식을 사용할 수 있습니다

(?<=pat)\s+ 
  • (?<=pat) 확실 하나 이상의 공백이 리터럴 문자열 앞에는하게 lookbehind 정규식입니다 pat

예 :

perl -wpe 's/(?<=pat)\s+/\n/g' <<< "9.2 20268 pat 6.0 24977 pat 4.0 21222 pat 3.9 20854 pat" 
9.2 20268 pat 
6.0 24977 pat 
4.0 21222 pat 
3.9 20854 pat 
+0

대단히 고마워요, 당신은 정규식에 대해 자세히 설명해 주시겠습니까? ? <= pat이 패턴 pat과 일치하고 \ s (문자열을 분할 할 때 이것을 의미할까요?) – user2986175

+0

@ user2986175 : 예 예 바로 앞에 설명이 추가되었습니다. '(? <= pat)은 하나 이상의 공백 앞에 리터럴 문자열 "pat"이 나뉘어 있는지 확인하는 lookbehind 패턴입니다. – anubhava

3

이 고정 "pat"을 분할 구분 기호로 사용할 수 있습니다.

perl -wpe 's/pat\s/pat\n/g' <<< "9.2 20268 pat 6.0 24977 pat 4.0 21222 pat 3.9 20854 pat" 
9.2 20268 pat 
6.0 24977 pat 
4.0 21222 pat 
3.9 20854 pat 

또는 \K보기 주변 주장에 대한

perl -wpe 's|pat\K\s|\n|g' <<< "9.2 20268 pat 6.0 24977 pat 4.0 21222 pat 3.9 20854 pat" 

perldoc perlre

.

+1

+1. 나는 가능한 한 복잡한 정규 표현식을 피하는 것을 선호한다. 그리고 이것은 정확히 당신의 대답이하는 것이다. – slayedbylucifer

관련 문제