2009-10-20 9 views
1

en essayant d'en savoir plus sur regex, et comment l'utiliser pour freiner des logs et peupler des textboxes avec les résultats.une simple question Regex

si j'ai une simple ligne comme celui-ci

Statut du port: tro-S-02-AV1 0/23

et que vous voulez mettre les TRO-S-02-AV1 et le 0/23 dans une variable

tous les noms Wold fin sur AV1 de sorte que le exspression régulière shold être sur cette base.

je pensais comme ça pour essayer d'obtenir la chaîne de TRO-S-02-AV1 pour devenir la valeur d'une zone de texte, mais je ne peux pas faire les choses, comment puis-je faire cela.

Regex r; 
    Match m; 

    r = new Regex("$`\av1"); 
    m = r.Match("Port status: tro-S-02-av1 0/23"); 

    nodetbx.Text = m.Value; 

Répondre

2

Utilisation de groupes avec l'expression rationnelle suivante (par exemple, vous pourriez probablement nettoyer ce haut)

Port status: (?<ID>[\d\w\-]+)\s(?<ID2>[\s\S]+) 

vais vous donner deux groupes nommés, ID1 et ID2 vous pouvez renseigner.

J'ai trouvé à l'aide des groupes nommés plus facile lors de la première regex d'apprentissage afin que vous puissiez vraiment voir ce qui se passe.

Jetez un oeil à nregex pour aider la pratique et de test regexs aussi.

regex r = new regex("Port status: (?<ID>[\d\w\-]+)\s(?<ID2>[\s\S]+)"); 
    matchcollection mc = r.matches(MyText); 
    foreach (match m in mc) { 
     string ID1 = m.groups("ID1"); 
     string ID2 = m.groups("ID2"); 
    } 

Où MonTexte est soit chaque ligne en boucle à travers le fichier avec ReadLine ou le fichier entier si pas trop grand.

Vous pouvez ensuite utiliser ID1 et ID2 (renommé quelque chose de significatif) pour remplir textbox ou autre.

+0

bonne aide, ce site a l'air bien, mais cette ligne vient de le rendre plus confus pour moi, comment puis-je utiliser ID et ID2? – Darkmage

+0

Selon que vous traitez ligne par ligne ou par lot, vous parcourez chaque correspondance de la collection et récupérez le groupe de chaque correspondance. Je ne fais pas beaucoup de C# donc je ne peux pas écrire le code parfait du haut de ma tête mais ... regex r = new regex ("REGEX"); matchcollection mc = r.matches (MyText); foreach (correspondance m en mc) { chaîne ID1 = m.groups ("ID1"); chaîne ID2 = m.groups ("ID2"); } –

+0

grande aide :) merci – Darkmage

1

Pour cet article particulier, vous pouvez utiliser la méthode de Éclate une chaîne

string[] words = s.Split(' '); 

utiliser la 2ème et 3ème valeur dans le arraylist.

+0

oui bon point mais c'est juste un échantillon le journal final est des centaines de lignes grandes, avec des informations différentes – Darkmage

+0

Ensuite, il est en effet inutile :) – Rickjaah

+0

Vrai cet exemple fonctionnerait avec le fractionnement de la chaîne et casserait pour exactement les mêmes raisons que l'exemple ci-dessus regex, cela dépend vraiment de quelle gamme de valeurs possibles que vous attendez à voir - seront les espaces toujours au même endroit, etc. Si le format Teh sera toujours comme ci-dessus, rester simple avec des cordes, si cela va/pourrait changer - regex probablement votre meilleur pari. –