2016-06-16 2 views
0

나는 잠시 동안이 작업을 해왔으며 앞으로 나 자신보다 앞서 가고 있다고 생각합니다. 나는 toString 자바 객체를 얻을 때 나는 결과를 얻고 있는데, 객체로 다시 직렬화하려고 시도하고있다. 그것이 하나의 객체라면 그것은 쉬울 것이지만 나는 목록을 가지고 있으며 목록 안에있는 모든 것을 하나씩 붙잡고 싶습니다.단일 문자열에서 동일한 표현식을 일치시키고 목록으로 변환

그래서 객체

목록 (AcquireRequest (X2, x3,1466008848103,5,5,5, 무엇이든, 목록 (ResourceAllocation (할당, 5), ResourceAllocation (Lolication, 25))) AcquireRequest (x2, x3,1466008848103,5,5,5, 무엇이든, List (ResourceAllocation (할당, 5), ResourceAllocation (Lolication, 25))), AcquireRequest (x2, x3,1466008848103,5,5,5,5 (ResourceAllocation (allocation, 5), ResourceAllocation (Lolication, 555))))

이것은 내부에 여러 필드 문자열 및/또는 숫자와 List of Another 객체가있는 AcquireRequest 객체 목록입니다. 내가 원하는 것은 AcquireRequest 문자열을 개별적으로 일치시켜 결과적으로 AcquireRequest를 사용하여 List (String)을 얻는 것입니다.

자바 매처 (matcher) 등을 사용하여 패턴 매칭을 시도했습니다. 혼자

일부 정규식 시도 :.?.???

(AcquireRequest ((= \들) (=) \ D * (=) \ D * (= ?) \ D * (=) \ D * (=) (=) (=))) (= |.?.?.))

AcquireRequest (() (.) (\ D *), (\ D *), (\ D *), (\ D *), (. ?) (.))

AcquireRequest ((+.))

첫 번째 시도는 현재 시도이지만 여전히 외부 List()를 제외한 모든 항목과 일치합니다. 나는 AcquireRequest 표현식 후에 다른 요소가오고 있다는 것을 의미하는 ","을 얻었 기 때문에 미리보기가 필요하다고 생각했다.

도움 주셔서 감사합니다.

+3

정규식을 사용하지 않는 것이 좋습니다.게다가, 직렬화를 위해 설계되지 않은 객체의 Java 'String'표현 대신 산업 표준 직렬화 형식 (바이너리, JSON, XML)을 사용하는 것이 좋습니다. – Mena

+0

그래, 나는 너와 완전히 동의한다. 나는 이것이 간단한 해결책이라고 생각했지만 잠시 후에는 이해하지 못했다. 내 말은, 나는 단순한 패턴 매칭을 사용하여 marshelling/unmarshelling의 90 %를 가졌지 만이 경우는 Regex에서 작동하지 않는다. 나는 json lib로 이동할 것이다. 그러나 나는 문제를 풀어줄 수없는 사람들 중 한 명이며 나는이 시간을 잃어 버렸다. 어쨌든 정규 표현식과 함께 할 수 있는지 이해할 필요가있다. –

+0

이것은 미리보기와 함께 가능해야하지만 그것이 원하는 방식으로 작동하지 않는다. –

답변

1

하나의 정규식이어야합니까? 어떻게 이런 일에 대해 :이 괄호 나 쉼표를 포함하지 않는 데이터에 문자열 값만큼 작동합니다

string 
    .replaceAll("""\w+?\(|\)+""", "") 
    .split(",\\s*") 
    .grouped(11) 

. 하지만 그렇게하면 어쨌든 엉망이됩니다. 정규식 솔루션이 없으면 실제 구문 분석기가 필요합니다.

마지막 주석에 대한 응답으로 (내부 목록은 가변 크기 임). 필자는 완전한 솔루션을 제공 할 의도가 전혀 없었습니다 (freelancer.com에서 정확한 사양을 작성하도록하는 것이 더 좋지 않을 수도 있음). 그러나 이것에 대해서는 어때요 :

string 
    .split("""\({2,},?\s*""") 
    .map { _.replaceAll("""\w+?\(|\)+""", "").split(",\\s*") } 
+0

하나 일 필요는 없습니다. 그러나, 나는 AcquireRequest 구조를 분리하고 싶다. 내가 코드를 실행할 때 얻은 것은 모든 구조의 각 필드의 목록이었습니다. 총 33 개의 요소가 필요했는데, 필요한 모든 것은 3입니다. 입력에 감사드립니다. –

+0

예. 나는 거의 그것을 지금 얻었다. 남은 유일한 것은 바꾸기와 나누기가 문자열 앞에 공백이있는 필드를 남겨두고 있다는 것입니다. 그걸 다듬어야 만하고 좋은 걸 –

+0

다시 편집하여 공백을 제거하십시오. – Dima

관련 문제