2017-07-27 1 views
2

J'ai une chaînecorrespondant à un motif dans une chaîne

string str = "I am fine. How are you? You need exactly 4 pieces of sandwiches. Your ADAST Count is 5. Okay thank you "; 

Ce que je veux, obtenir la valeur de comptage ADAST. Pour l'exemple ci-dessus, il s'agit de 5.

Le problème ici est le is après le ADAST Count. Il peut être is ou =. Mais il y aura les deux mots ADAST Count.

Ce que j'ai essayé est

var resultString = Regex.Match(str, @"ADAST\s+count\s+is\s+\d+", RegexOptions.IgnoreCase).Value; 
var number = Regex.Match(resultString, @"\d+").Value; 

Comment puis-je écrire le modèle qui recherche is ou =?

+1

essayer '[est | = ] 'au lieu de simplement' is'. –

Répondre

2

Vous pouvez utiliser

ADAST\s+count\s+(?:is|=)\s+(\d+) 

Voir la regex demo

Notez que (?:is|=) est un non-capturing group (il est utilisé uniquement des alternances de groupe sans pousser ces sous-correspondances à la pile de capture pour plus de récupération) et | est un alternation operator.

Détails:

  • ADAST - une chaîne littérale
  • \s+ - 1 espaces blancs ou plus
  • count - une chaîne littérale
  • \s+ - 1 ou plusieurs espaces blancs
    • (?:is|=) - soit is ou =
  • \s+ - 1 ou plus des espaces blancs
  • (\d+) - Groupe 1 capturant un ou plusieurs chiffres

C#:

var m = Regex.Match(s, @"ADAST\s+count\s+(?:is|=)\s+(\d+)", RegexOptions.IgnoreCase); 
if (m.Success) { 
    Console.Write(m.Groups[1].Value); 
} 
+1

Merci! Merci pour l'explication :). Une autre chose, ce que cela signifie par 'Groupe 1' dans' (\ d +) '? –