2010-02-16 10 views
2

J'essaye d'analyser les chiffres à stocker dans une variable d'une chaîne dans VB.NET (voudrait inclure également le point décimal).Analyser les nombres d'une chaîne utilisant regex dans VB.NET

Voici un exemple de chaîne: Refund issued for $27.74

+0

Un peu plus de contexte pourrait être en ordre. Maintenant je pourrais simplement répondre: "attrape tout après le' $ '". –

+0

Cela peut être utile aussi: http://txt2re.com/ –

Répondre

2

Comme casperOne déjà souligné, un exemple n'est pas suffisant pour donner une solution complète.

La chaîne d'expression régulière peut ressembler à "\\$([0-9]+\\.[0-9]+)" ou "Refund issued for \$(?<Value>[0-9]+\.[0-9]+)". Ce dernier étant plus restrictif. Le deuxième exemple utilise également un groupe nommé. Cela peut faciliter l'extraction des correspondances après l'appel de Regex.Match si vous avez un scénario plus complexe.

Expresso est un bon outil pour jouer avec les expressions régulières de style .net.

1

Vous avez vraiment pas besoin d'un regex pour cela, comme une itération simple et comparaison de chaque caractère de 0-9 (ou un appel à la static IsNumber method on the Char structure) serait le faire (désolé pour le code C#, il est assez facile de traduire en VB.NET):

static IEnumerable<char> GetNumericCharacters(this string s) 
{ 
    // Check for null. 
    if (s == null) throw new ArgumentNullException("s"); 

    // Iterate through the characters. 
    foreach (char c in s) 
    { 
     // If a number, return it. 
     if (char.IsNumber(c)) yield return c; 
    } 
} 

Bien sûr, l'expression régulière est tout aussi simple:

[0-9] 

Vous pouvez utiliser la classe RegEx pour obtenir toutes les correspondances pour ce modèle et les concaténer ensemble.

Le seul moment où chacune de ces solutions échouent lorsque vous avez plusieurs numéros dans des contextes différents, par exemple:

« L'utilisateur a acheté 10 articles à 0,99 $ chacun »

Questions connexes