2010-04-19 5 views
1

Je suis un idiot de regex et je n'ai jamais trouvé un bon tutoriel (liens bienvenus, ainsi qu'un pointeur vers un éditeur intégré VS2010 intégré)..NET Regex - besoin d'une chaîne de correspondance pour l'analyse

J'ai besoin pour analyser les chaînes sous la forme suivante:

[a/b]:c/d 

a, b: double with "." as possible separator. CAN be empty 
c: double with "." as separator 
d: integer, positive 

à savoir les chaînes valides sont:

[/]:0.25/2 
[-0.5/0.5]:0.05/2 
[/0.1]:0.05/2 

;) N'importe qui peut aider?

Merci

Répondre

3
^\[(-?\d+\.?\d+?)?/(-?\d+\.?\d+?)?\]:(-?\d+\.?\d+?)/(\d+)$ 

capture chaque numéro dans son propre groupe. Ceci suppose qu'il est légal que vos valeurs doubles ne contiennent pas de partie décimale. Dans le cas contraire, vous pouvez utiliser

^\[(-?\d+\.\d+)?/(-?\d+\.\d+)?\]:(-?\d+\.\d+)/(\d+)$ 
1
var match = Regex.Match("[-0.5/0.5]:0.05/2", @"\[([\.\-0-9]*)/([\.\-0-9]*)\]:([\.\-0-9]*)/([\.\-0-9]*)"); 
if (match.Success) 
{ 
    Console.WriteLine(match.Groups[1].Value); 
    Console.WriteLine(match.Groups[2].Value); 
    Console.WriteLine(match.Groups[3].Value); 
    Console.WriteLine(match.Groups[4].Value); 
} 
+0

peut malheureusement choisir qu'une seule réponse que réponse;) Merci pour l'exemple de code. – TomTom

1

Il y a un éditeur de regex sur la Galerie Visual Studio:
http://visualstudiogallery.msdn.microsoft.com/en-us/55c24bf1-2636-4f94-831d-28db8505ce00

Il est pas très connu, mais il est possible de placer des espaces et des commentaires dans vos regex. Cela peut rendre une regex comme celles-ci beaucoup plus lisible. Voici un exemple basé sur la première réponse de Tim Pietzcker:

var regex = @"(?x: 
    ^     # Anchor to start of string 
    \[     # [ 
     (-?\d+\.?\d+?)? # a - double 
    /     #/
     (-?\d+\.?\d+?)? # b - double 
    \]     # ] 
    :     # Literal colon character 
     (-?\d+\.?\d+?) # c - double 
    /     #/
     (\d+)   # d - integer 
    $     # Anchor to end of string 
)"; 
Questions connexes