2009-07-02 2 views
1

을 분할 다음자바 정규식 내가 일부 데이터가 같은 형식의 한

 
2009.07.02 02:20:14 40.3727 28.2330  6.4  2.6 -.- -.- BANDIRMA-BALIKESIR 
2009.07.02 01:38:34 38.3353 38.8157  3.5  2.7 -.- -.- KALE (MALATYA) 
2009.07.02 00:10:28 38.8838 26.9328  3.0  3.0 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 23:33:31 36.8027 34.0975  8.2  2.9 -.- -.- GÜZELOLUK-ERDEMLI (MERSIN) 
2009.07.01 22:32:44 38.9260 27.0338  5.0  3.4 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 22:12:37 40.2120 41.0378  3.7  2.9 -.- -.- OVACIK-ILICA (ERZURUM) 
2009.07.01 22:10:53 38.9208 26.9502  5.0  3.5 -.- -.- ÇANDARLI-DIKILI (IZMIR) 
2009.07.01 21:44:29 38.8695 27.1268  6.9  2.9 -.- -.- YUNTDAG-BERGAMA (IZMIR) 
2009.07.01 21:27:53 38.9073 26.9895  5.0  3.0 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 21:18:19 38.9212 26.9060  5.0  3.4 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 21:12:15 38.8657 26.9447  13.7  3.8 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 21:09:43 38.9260 27.0853  5.0  3.1 -.- -.- ZEYTINDAG-BERGAMA (IZMIR) 
2009.07.01 21:05:40 38.9153 26.9710  5.0  3.4 -.- -.- ÇANDARLI-DIKILI (IZMIR) 
2009.07.01 20:29:02 37.6888 38.7212  5.0  3.3 -.- -.- AKINCILAR-KAHTA (ADIYAMAN) 
2009.07.01 18:17:12 41.2700 36.0502  2.7  2.7 -.- -.- TAFLAN- (SAMSUN) 
2009.07.01 17:50:03 38.6312 35.7962  5.0  2.8 -.- -.- ELBASI-BÜNYAN (KAYSERI) 

나는이 흰색 선에 분할하고 싶지만 내가 괄호가있는 경우 분할하지 않도록 마지막 열을 하시겠습니까? 각 줄을 8 개로 나누고 싶습니다. 이것이 가능한가?

답변

0

정규 표현식 도구 (예 : RegexBuddy)에 넣습니다.

하지만 용도에 따라 \s+ 또는 \s\s+으로 나누기가 쉽고 limit으로 설정하십시오. 그것은 당신이 당신의 정규식을 작성하는 데 도움이 도구를 사용하는 이유는 텍스트의 원하는 부분에 따라 다릅니다.

특별히 실제로는 같은 수 라인 "단어 (단어 단어)"로 문제가 해결되지 않는 "("앞에 공백이 일치하지 않도록하려면

당신은 zero-width negative lookahead 그룹을 사용할 수 있습니다. 뭔가를 \s+(?!\()처럼.

+0

이것은 작동하지 않습니다. \ s +와 8로 제한하면 마지막에 -.-와 이름 필드가 결합되며, 각 행에서 분할을 수행한다고 가정합니다. 한도가 9 인 분할은 타임 스탬프가 두 부분으로 분할되지 않는다고 가정 할 때 작동합니다. –

+0

그는 구체적으로 말했습니다 : "각 줄을 8 개로 나누고 싶습니다."분명히 타임 스탬프 사이에 공백 하나를 두지 않았습니다. 탭으로 구분 된 경우 각 줄과 .split (@ "\ s \ s +", 8) – dlamblin

2

왜 여기에 정규 표현식을 사용하고 있습니까?

은 데이터 파일이 완벽하게 정렬되어

, 당신은

line.substring(0,12) 
line.substring(13,20) 
.. 
.. 

그것은 훨씬 더 빠르게이 방법으로 데이터를 추출 할 수 있습니다.

0

서식이 지정된 텍스트처럼 보입니다. 첫 번째 추측은 탭 문자를 어기는 것입니다.

String[] parts = line.split('\t'); 

그래도 작동하지 않으면 괄호 뒤에 공백이 오지 않을 수 있습니다. Lookahead 패턴 구문을 보려면 Pattern 아래의 javadoc을 찾으십시오. 예 : 당신이 정규식에

"ABC DEF (GHI)" 

을 분할하는 경우 :

String regex="\\ (?!\\()"; 

(로이 읽기 '?! X (공간)'여기서 "X 일치 부정적인 예견을"(X) 의미?! "는 "와 이스케이프 openparen는"\ "ABC, DEF (GHI) ("

당신이 얻을. 치환된다) "텍스트를 가정

이 작동하지 않습니다 숫자 위치에 의해 구문 분석, 탭으로 구분됩니다.

+0

을 사용할 수 있습니다. 단지 string.split ("\ t")을 사용하십시오. –

0

9 개가 아니라 8 개가 필요합니다. 그럼 시도해보십시오. line.split("\\s+", 9);.

관련 문제