2012-01-17 2 views
0
내가이 형식의 항목을 저장 텍스트에서 중국 데이터베이스 함께 일하고

:복잡한 문자열

전통 간체 [핀 1 yin1]/영어 해당하는 1/동등 나는 그것을 구문 분석을 시도했습니다 2/

구분 기호 (자바)를 사용합니다.

    String delims = "[\\[\\]/]+"; 
        String tokens[] = str.split(delims); 

문제는 영어 동등한도 구분 토큰이 포함되어 있습니다 :

이것은 내가 지금까지있는 것입니다. 예를 들어

:

⿔ ⿔ 龜의 [gui1]/변형 | 龟 [gui1]/

어떻게 사람이 문자열을 구문 분석?

간체 :

전통

: ⿔

병음 : gui1

영어 나 문자열에서 다음과 같은 정보를 얻으려고

동등한 : 변형의 龜 | 龟 [ gui1]

+0

좀 더 정교한하시기 바랍니다, 문자열이 아무 의미가없는 CEDICT 여러 정의가 종종 있기 때문에, 조금 더 복잡 마에. –

+0

문자열에 'a/b/c /'라고 쓰고 b에 구분 기호 '/'가 포함될 수 있습니다. a와 c도 구분 기호를 포함 할 수 있습니까? – brianestey

+0

CEDICT입니까? 뭔가를 놓칠 수도 있습니다. 형식은 "Traditional Simplified [pin1 yin1]/English equivalent 1/equivalent 2 /.../ equivalent n /" – wuliang

답변

2

전체 문자열을 정리하려면 정규식을 사용해보십시오.

String text = "⿔ ⿔ [gui1] /variant of 龜|龟[gui1]/"; 

String pattern = "(\\S+)\\s*(\\S+)\\s*\\[(.+?)\\]\\s*/(.+?)/"; 

text = text.replaceAll(pattern, "$1;$2;$3;$4")); 

(\\S+) --->
찾을 연속 공백이 아닌 그룹

\\s* --->
찾을 연속 공백

\\[(.+?)\\] --->gui1
안에있는 모든 것을 찾으십시오 [ bla bla bla ].
'?'은 가능한 가장 짧은 답변과 일치합니다.
예 : [ BLA BLA ]보다는 [ BLA BLA [BLE BLE ]

/(.+?)/ ---> 상기와 같은 variant of 龜|龟[gui1]
있지만 찾는 모든 내부 /BLA/
'?'가 짧은이

당신은 정규식을 here


을 테스트 할 수 있습니다 일치하는 것은 이제 text가된다 : delims 그들에게

String tokens[] = text.split(";"); 
을 분할로
⿔;⿔;gui1;variant of 龜|龟[gui1]

다음은 당신이 ;을 계속 사용할 수 있습니다

+0

CEDICT - OP가 사용하는 사전 - 16 개/정의/(마지막 개수) : /one/two/.../가 될 수 있습니다. 따라서 정규 표현식을 모두 잡아야합니다. – dda

0

정규식 패턴은 jus입니다.

矮小 矮小 [ai3 xiao3] /short and small/low and small/undersized/ 

그래서 정규식은 다음과 같습니다 :

^(\S+)\s+(\S+)\s+\[[^]]+\]\s+(/[^/\r]*){1,19}/$