2010-09-09 7 views
4

Je dois créer une regex. la chaîne que je veux faire correspondre commence toujours par \ alors 4 ou 5 nombres puis un autre \Regex, chaîne de 4 ou 5 chiffres entre "" et ""

Par exemple.

  1. Welcome Home < \ 217.163.24.49 \ 7778 \ Faux,
  2. Euro Server \ 217.163.26.20 \ 7778 \ Faux,
  3. Instagib!) \ 85.236.100.115 \ 8278 \ Faux,

Dans le premier exemple j'ai besoin de "7778". Dans le deuxième exemple j'ai besoin de "7778". Dans le troisième exemple j'ai besoin de "8278". Ces numéros à 4 chiffres sont en fait un numéro de port, et c'est la seule fois sur chaque ligne que cette série de caractères (par exemple, \ 7778 \) apparaîtrait. parfois le numéro de port est de 4 chiffres, parfois son 5.

Je sais déjà comment conserver la chaîne pour une utilisation ultérieure en utilisant Regex.Match.Success, c'est juste le motif réel regex que je recherche ici.

grâce

Répondre

6
var match=Regex.Match(@"\1234\",@"\\(?<num>\d{4,5})\\"); 


if(match.Success) 
{ 
    var numString=match.Groups["num"].Value; 
} 

ou (si vous ne l'aimez pas en utilisant des groupes) vous pouvez utiliser des assertions lookbehind et lookahead pour vous assurer que votre correspondance de 4 à 5 chiffres est entourée de barres obliques:

var match=Regex.Match(@"\1234\",@"(?<=\\)\d{4,5}(?=\\)"); 
if(match.Success) 
{ 
    var numString=match.Value; 
} 
1

Essayez (\\[\d]{4,5}\\)

+0

Pourquoi les crochets autour \ d? Cela en fait juste un ensemble avec un membre. – JasonFruit

+0

ok je l'ai fait, et il conserve réellement le "0" – brux

+0

je dois imiter le quand j'utilise regex.match.success pour obtenir la chaîne correspondante est-il un moyen d'omettre les "\"? – brux

3
@"\\(\d{4,5})\\" 

\\ pour correspondre à une barre oblique inverse, \d pour correspondre à des chiffres, {4,5} pour "4 à 5". Les parenthèses autour de \d{4,5} font en sorte que vous pouvez accéder à la partie numéro avec .Groups[1].

+0

salut sepp2k, j'ai essayé ceci et son maintien le "\" de chaque côté du nombre de 4/5 chiffres. J'ai juste besoin du numéro – brux

+0

@brux: Comme je l'ai dit dans mon edit, le nombre sera dans le premier groupe de capture si vous mettez les parenthèses autour de '\ d {4,5}'. – sepp2k

+0

var match1 = Regex.Match (temp, @ "\\\ (\ d {4,5}) \\"); if (match1.Success) ipaddr.Text = match1.Captures [0].ToString(); la chaîne dans la zone de texte est \ 7778 \ not 7778: s – brux

1

J'ai développé un outil simple pour vérifier les regexes par rapport aux exemples de chaînes; c'est une chaîne valide pour vos samples en C#, elle n'est cependant pas "stricte"!

(?<name>.+?)\\(?<ip>[0-9.]+)\\(?<port>[0-9]{4,5})\\(?<boolean>[False|True]+)

0
\\[0-9]{4,5}\\ 

\ Elle doit commencer par \ (un autre \ est d'échapper)
[0-9] Il pourrait être l'un des numéro mentionné dans l'ensemble (0,1,2,3 ... 9)
{4,5} précédents peut apparaître 4 à 5 fois
\ Il doit se terminer par \ (un autre \ est d'échapper)

Questions connexes