2012-03-18 2 views
0

정규식을 사용하여 추가 처리를 위해 채팅 로그 파일에서 데이터를 추출해야하는 Java 프로그램을 작성하고 있습니다. 길). 채팅 로그 스키마는 다음과 같이 정의됩니다. [hh : mm : ss] 문자열.
그러나 데이터를 추출하려는 특정 행은 [hh : mm : ss] < 데이터 1 > 데이터 2의 형식입니다. 내가 추출하고자하는 데이터는 hh : mm : ss, data1 및 data2입니다. 처음에는 사용하기 쉬운 시간을 추출하려고했습니다. Pattern.compile ("(\ d {2} : \ d {2} : \ d {2})
": MM : SS HH를", 데이터 1과 데이터 2를 내가 얻을 때 그것은 괜찮다고
을하지만, 별도로 =는 Pattern.compile (". < (*)>")을 패턴 (P1)을 사용하여 DATA1를 추출한다. 다음 정규식 패턴 (P)를 이용하여 =는 Pattern.compile ("(\의 D {2} \의 D {2}.. \의 D {2})   < (*)>   (*)") I h ave 일치하는 것이 없습니다. 그렇다면 목표를 달성하기 위해 어떻게 진행할 수 있을지에 대한 아이디어가 있습니까?regex 및 java를 사용하여 채팅 로그에서 데이터 집합을 가져옵니다.

+0

데이터 샘플을 제공 할 수 있습니까? –

답변

1

당신이 당신 자신의 패턴과 일치했다면 모든 것이 좋았을 것입니다. 당신은 시간의 괄호에 대해 잊어 버린다 : [ hh : mm : ss ]. 여기를 참조하십시오 :

String text = "22:44:55 <data quite much> data 2"; 
    text = text.replaceAll("(\\d{2}:\\d{2}:\\d{2}) <(.*)> (.*)", "replacement"); 
    System.out.println(text); 
    text = "[22:44:55] <data quite much> data 2"; 
    text = text.replaceAll("(\\d{2}:\\d{2}:\\d{2}) <(.*)> (.*)", "replacement"); 
    System.out.println(text); 

이 생성됩니다

replacement 
[22:44:55] <data quite much> data 2 

그래서 첫 번째 문자열이 일치하고 일초했다 - 없습니다. 예상대로.

아마 패턴을 \\[(\\d{2}:\\d{2}:\\d{2})\\] <(.*)> (.*)으로 변경해야합니다.

+0

고마워 Boris, 완벽하게 작동합니다. 이제 프로그래밍 과정을 계속할 수 있습니다. 내가 당신 께 신세를지는 거죠 –

관련 문제