2010-03-29 2 views
2

나는 웹 서비스를 부르고있다. 나는 돌아온다는 것은 거대한 텍스트 다. 나는 그것을 스스로 처리해야한다. 문제가 모든 라인이 반드시 동일하지는 않습니다. 그들은 각각 2 개 또는 3 개의 섹션을 가지며 유사합니다. 다음은 가장 일반적인 예입니다.복잡한 문자열 처리 - 나에게 잘 어울린다

 
text1 [text2] /text3/ 
text1/test3 
text1[text2]/text3 
text1 [text2] /text /3 here/ 

이 문제를 해결하는 방법이 확실하지 않습니다. 나는 현악기를 다루는 것까지는 진보 된 것을하기에는 너무 좋지 않다.

나는 정규 표현식을 사용하는 것이 효과가있을 것이라고 생각했지만 너무 확실하지는 않습니다. 이 세 섹션을 각각 분리 할 수 ​​있다면 나머지 작업을 쉽게 수행 할 수 있습니다. 그것의 바로 거기에서 내가 일하는 방법을 알고있는 주된 3 개의 섹션에 어떤 통일 성도없는 것처럼 보인다.

편집 : 언급 해 주셔서 감사합니다. 나는 실제로 내가하고 싶은 것을 말하지 않았습니다.

기본적으로 나는이 3 개의 텍스트 섹션을 별도의 문자열로 분리하여 기본적으로 하나의 단일 문자열에서 3 개의 문자열 배열로 가져 가고 싶습니다. 여기

 
string[0] = text1 
string[1] = text2 
string[2] = text3 

텍스트의 일부는 내가 예를 들어 내가 배열

 
string[0] = スルホ基 
string[0] = [スルホき] 
string[0] = /(n) sulfo group/ 
으로 잡아 당깁니다하려는 예를 들어 첫 번째 행으로

 
スルホ基 [スルホき] /(n) sulfo group/ 
鋭いナイフ [するどいナイフ] /(n) sharp knife/ 
鋭い批判 [するどいひはん] /(n) sharp criticism/ 
スルナーイ /(n) (See ズルナ) (obsc) surnay (Anatolian woodwind instrument) (per:)/zurna/ 
スルピリン /(n) sulpyrine/ 
スルファミン /(n) sulfamine/ 
剃る [そる(P);する] /(v5r,vt) to shave/(P)/ 

로 전화에서 돌아갈 것입니다

+1

실제로 어떤 처리를 수행 하시겠습니까? –

답변

3

이러한 예는 다소 임의적으로 보입니다. 어떤 종류의 주문이 있어야합니다. 서비스 사양이 없습니까? 그렇지 않다면 우리가 규칙을 이해할 수 있도록 더 많은 예제를 제안하십시오.

+0

좋아, 내가 돌아 오는 길을 몇 줄 추가해 보겠다. – percent20

0

finite state machines에 대한 정보를 읽고 입력 구문 분석 문제에 대해 몇 가지 개념을 사용할 수 있는지 확인하십시오.

각 행에 그룹에 순서가있는 경우 정규식을 사용하여 그룹을 구분할 수 있습니다.

편집 : 샘플을보고 나면 정규 표현식을 사용하여 특정 구분 기호를 사용할 수 있습니다. 이론을 테스트하는 데는 아마도 30 분이 걸립니다. 무료 정규 표현식 테스터를 선택하고, 그 그룹 중 하나만 분리하고, 몇 개의 샘플 라인을 펌핑하는 정규 표현식을 만듭니다. 보유하고있는 실제 데이터에서 안정적으로 수행하는 경우이를 확장하고 다른 그룹도 분리 할 수 ​​있는지 확인하십시오.

비록 당신의 데이터에 어떤 종류의 얼룩이 있다면 (그리고 종종있을 수 있습니다) 당신의 정규 표현식이 깨지거나 악몽이 될 것이라고 언급해야합니다. 그래서 그들에게 정착하기 전에 길고 열심히 시험하십시오. 데이터에서 예외가 발생하기 시작하면 일종의 파싱 알고리즘을 선택해야합니다 (위에서 언급 한 FSM은 파싱 메커니즘을 구현할 때 따라갈 수있는 패턴입니다).

+0

와우 (Wow)는 그 첫 번째 작은 부분을 읽었으며, 뭔가하는 것처럼 보일 수도 있습니다. – percent20

+0

ㅎ, 처음 보았을 때 조금은 눈에 띄지 않지만 상당히 간단하게 만들 수 있습니다. – slugster

0

가장 바보 같은 대답은 "정규 표현식 사용"입니다. 그러나 더 나은 정보를 얻으려면 더 많은 정보가 필요합니다.

+0

정규식이 어리석은 이유는 무엇이며 더 많은 정보가 필요합니까? – percent20

+0

행의 양을 위해 정규식으로 파싱하는 것은 매우 느립니다. 이 행을 하나의 문자열처럼 얻는 경우에만. 이 행에 독립 실행 형 분할 기호가 있으면 string.Split() 함수를 사용하십시오. 어떤 종류의 해킹은이 행에 대한 독자적인 (de) 직렬화 Formatter를 작성하여 Array 기반 객체에 텍스트를 deserialize합니다. – Stremlenye

관련 문제