2010-03-29 6 views
2

J'appelle un service Web et tout ce que je reçois est un blob de texte géant. Je suis laissé pour le traiter moi-même. Le problème n'est pas toutes les lignes sont nécessairement les mêmes. Ils ont chacun 2 ou 3 sections pour eux et ils sont similaires. Voici les exemples les plus courantsTraitement de chaîne complexe - bien complexe pour moi

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

Je ne sais pas exactement comment aborder ce problème. Je ne suis pas très doué pour faire quelque chose d'avancé en ce qui concerne la manipulation des cordes. Je pensais que l'utilisation d'une expression régulière pourrait fonctionner, mais je ne suis pas trop sûr de cela non plus. Si je peux séparer chacune de ces trois sections, il est plus facile de faire le reste. C'est juste qu'il n'y a pas d'uniformité dans les 3 sections principales avec lesquelles je sais travailler.

EDIT: Merci de mentionner que je n'ai pas vraiment dit ce que je voulais faire.

Fondamentalement, je veux diviser ces 3 sections de texte en leurs propres chaînes séparent les piqûres afin de le prendre d'une seule chaîne à un tableau de 3 chaînes.

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

Voici une partie du texte je reviens d'un appel à titre d'exemple

 
スルホ基 [スルホき] /(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)/ 

la première ligne pour un exemple que je veux le sortir dans un tableau

 
string[0] = スルホ基 
string[0] = [スルホき] 
string[0] = /(n) sulfo group/ 
+1

Quel traitement voulez-vous réellement faire? –

Répondre

3

Ces exemples semblent un peu aléatoires, il doit y avoir une sorte d'ordre, n'est-il pas une spécification pour le service? Si non je suggère plus d'exemple afin que nous puissions comprendre les règles.

+0

Très bien, je vais ajouter quelques lignes de ce que je récupère. – percent20

0

Lisez quelques informations ici sur finite state machines, et voyez si vous pouvez utiliser certains des concepts sur votre problème d'analyse d'entrée.

S'il y a un certain ordre dans les groupes sur chaque ligne, alors peut-être vous pouvez utiliser une regex pour séparer les groupes.

Editer: Après avoir vu vos échantillons, vous pouvez vous en sortir avec une regex, brisant certains de ces délimiteurs spécifiques. Il faudra peut-être une demi-heure pour tester la théorie: choisissez un testeur de regex gratuit, établissez vous-même une regex qui isolera un seul de ces groupes et pomperez quelques lignes d'échantillons. S'il fonctionne de manière fiable sur les données réelles que vous possédez, développez-le et voyez si vous pouvez également isoler les autres groupes.

Je devrais mentionner cependant que vos regex vont casser ou juste devenir un cauchemar s'il y a n'importe quelles sortes de caprices dans vos données (et fréquemment il y a). Alors testez longtemps et fort avant de vous y attarder. Si vous trouvez que vous commencez à avoir des exceptions dans vos données, alors vous devrez choisir une sorte d'algorithme d'analyse (le FSM que j'ai mentionné ci-dessus est un modèle que vous pouvez suivre si vous implémentez un mécanisme d'analyse).

+0

Wow lire le premier petit peu de cela et il semble que ce pourrait être quelque chose à voir sur le faire. – percent20

+0

Heh, c'est un peu un regard quand vous le voyez pour la première fois, mais vous pouvez le simplifier considérablement. – slugster

0

La réponse la plus stupide est "Utiliser regex". Mais plus d'informations nécessaires pour mieux.

+0

Pourquoi est-ce que regex est stupide et quelles autres informations sont nécessaires? – percent20

+0

Pour une quantité de ligne, il est très lent à l'analyser par regex. Seulement si vous obtenez ces lignes comme une seule chaîne. Si ces lignes génèrent des symboles de séparation standard, utilisez la fonction string.Split(). Une sorte de piratage consiste à écrire votre propre Formatter (de) sérialisation pour ces lignes, ce qui désérialise le texte en objet basé sur Array. – Stremlenye