Comment puis-je diviser cette chaîne en un tableau?
Ma chaîne est comme suit:
smtp:jblack@test.com;SMTP:jb@test.com;X400:C=US;A= ;P=Test;O=Exchange;S=Jack;G=Black;
J'ai besoin de retour:
smtp:jblack@test.com
SMTP:jb@test.com
X400:C=US;A= ;P=Test;O=Exchange;S=Jack;G=Black;
Le problème est que les points-virgules séparer les adresses et fait également partie de l'adresse X400. Quelqu'un peut-il suggérer la meilleure façon de diviser ce?
PS je devrais mentionné l'ordre diffère de sorte qu'il pourrait être:
X400:C=US;A= ;P=Test;O=Exchange;S=Jack;G=Black;;smtp:jblack@test.com;SMTP:jb@test.com
Il peut y avoir plus de 3, 4, 5.. 10, y compris une adresse X500, mais ils ne commencent tous par smtp: SMTP: X400 ou X500.
- +1, un intrigant, un tellement que j'ai pas de "vrai" travail accompli depuis les 10 dernières minutes! =)
Vous devez vous connecter pour publier un commentaire.
EDIT: Avec la mise à jour de l'information, cette réponse ne sera certainement pas faire l'affaire mais c'est toujours potentiellement utile, donc je vais le laisser ici.
Vous de toujours avoir trois parties, et vous voulez juste de se diviser sur les deux premiers points-virgules?
Si oui, il suffit d'utiliser la surcharge de Split, qui vous permet de spécifier le nombre de sous-chaînes à retourner:
Je suggère la construction d'une expression régulière
ou protocole-moins
en d'autres mots, trouver quelque chose qui commence avec l'un de vos protocoles. Match le côlon. Continuer ensuite en caractères aussi longtemps que vous n'êtes pas correspondant à l'un de vos protocoles. Terminer par un point-virgule (en option).
Vous pouvez ensuite analyser par le biais de la liste des matches de la division de": "et vous aurez vos protocoles. De plus, si vous souhaitez ajouter des protocoles, il suffit d'ajouter à la liste.
Cependant probable que vous allez avoir à spécifier l'ensemble de la chose comme insensible à la casse et uniquement la liste des protocoles dans leur majuscules ou en minuscules versions.
Le protocole-moins la version ne se soucie pas de ce que les noms des protocoles. Il trouve qu'il est tout de même, par la correspondance de tout jusqu'à, mais excluant une chaîne de caractères suivie d'une virgule ou un point-virgule.
Divisé par le texte suivant regex modèle
EDIT: mieux que l'on peut accepter plus de caractères spéciaux dans le nom du protocole.
http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx
vérifiez là, vous pouvez spécifier le nombre de divisions que vous voulez. donc, dans votre cas, vous ne
Pas le plus rapide si vous faites cela beaucoup, mais il va travailler pour tous les cas je crois.
Bien sûr, beaucoup prétendent Regex: Maintenant, vous avez deux problèmes. Il peut même être un meilleur regex répondre que cela.
Vous pouvez toujours divisés sur le côlon et avoir un peu de logique pour récupérer la clé et la valeur.
Testé avec deux de vos échantillons et il fonctionne très bien.
Cela a attiré ma curiosité .... Donc, ce code ne fait le travail, mais encore une fois, veut ranger 🙂
Ma dernière tentative - arrête de changer ce que vous avez besoin ;=)
Essayez ces regexes. Vous pouvez extraire ce que vous cherchez en utilisant des groupes nommés.
Assurez-vous que lorsque les construire vous spécifiez pas sensible à la casse. Ils semblent travailler avec les exemples que vous avez donné
Beaucoup de tentatives. Voici la mienne 😉
Ce trouve tous smtp, x400 ou x500 adresses dans la chaîne de caractères dans n'importe quel ordre d'apparition. Il permet également d'identifier le type de prêt pour un traitement ultérieur. L'apparence du texte smtp, x400 ou x500 dans les discours eux-mêmes ne seront pas bouleverser le modèle.
Cela fonctionne!
Faire le point-virgule (;) split, puis une boucle sur le résultat, puis la combinaison de chaque élément où il n'y a pas de signe deux-points (:) avec l'élément précédent.
ici est une autre solution possible.
string[] bits = text.Replace(";smtp", "|smtp").Replace(";SMTP", "|SMTP").Replace(";X400", "|X400").Split(new char[] { '|' });
bits[0],
bits[1], et
bits[2]
ensuite contient les trois parties dans l'ordre de votre chaîne d'origine.
X400:C=US;A= ;P=Test;O=Exchange;S=Jack;G=Black;;smtp:[email protected];SMTP:[email protected]