Comment extraire du texte dans une chaîne de texte
J'ai un problème simple que je suis l'espoir de le résoudre sans l'aide de VBA mais si c'est la seule façon dont il peut être résolu, ainsi soit-il.
J'ai un fichier avec plusieurs lignes (toutes les colonnes). Chaque ligne dispose de données qui ressemble à quelque chose comme ceci:
1 de 7,82 E-13 >gi|297848936|ref|XP_00| 4-hydroxyde de gi|297338191|gb|23343|randomrandom
2 5.09 E-09 >gi|168010496|ref|xp_00| 2-pyruvate
etc...
Ce que je veux, c'est une certaine façon d'extraire la chaîne de nombres qui commencent par "gi|" et se terminent par un "|". Pour certaines lignes, cela peut vouloir dire autant que 5 gi numéros, pour d'autres, il va juste être un.
Ce que j'espère la sortie ressemblerait serait quelque chose comme:
297848936,297338191
168010496
etc...
source d'informationauteur Brandon
Vous devez vous connecter pour publier un commentaire.
Ici est très souple VBA réponse à l'aide de l'objet regex. Ce que la fonction n'est extrait de chaque sous-match du groupe qu'il trouve (des trucs à l'intérieur de la parenthèse), séparés par quelque chaîne que vous souhaitez (par défaut,", "). Vous pouvez trouver des informations sur les expressions régulières ici: http://www.regular-expressions.info/
Vous l'appeler comme cela, en supposant que la première chaîne est en A1:
Car cela ressemble pour toutes les occurence de "gi|", suivi par une série de chiffres et ensuite un autre "|", pour la première ligne, dans votre question, ce serait vous donner ce résultat:
Lancez-le en bas de la colonne et vous êtes tous fait!
Ici, c'est (en supposant que les données sont dans la colonne A)
Pas la plus belle formule, mais il faudra travailler pour extraire le nombre.
Je viens de remarquer que depuis vous avez deux valeurs par ligne avec sortie séparés par des virgules. Vous aurez besoin de vérifier si il y a un deuxième match, le troisième match etc. pour le faire fonctionner pour plusieurs numéros par cellule.
En référence à vos exacte de l'échantillon (en supposant que les 2 valeurs maximum par cellule) le code suivant fonctionne:
Comment est-ce pour laid? Une solution VBA peut-être mieux pour vous, mais je vais laisser cela pour vous.
Aller jusqu'à 5 numéros, ainsi, l'étude de la structure et recurse manuellement dans la formule. IL va être longue!
Je serais probablement diviser les données en premier sur le
|
séparateur à l'aide de l'assistant conversion.Dans Excel 2007 qui est sur le Données onglet, Outils de Données groupe, puis choisissez Colonnes de Texte. Spécifier Autres: et
|
comme délimiteur.À partir de l'échantillon de données que vous avez posté, il ressemble après vous faites cela, les numéros seront tous dans les mêmes colonnes, de sorte que vous pourriez ensuite, il suffit de supprimer les colonnes que vous ne voulez pas.
Comme les autres gars présenté la solution sans VBA... je vais vous présenter celle qui fait de l'utiliser. Maintenant, c'est votre appel à l'utiliser ou pas.
Viens de voir que @Issun présenté la solution avec la regex, très sympa! De toute façon, présentera un "modeste" solution de la question, en utilisant uniquement la 'plaine' VBA.