2013-07-11 3 views
1

Donc, j'ai la méthode ci-dessous qui va parcourir une liste de mots, trouve "Numéro de contrôle:" et le définit à wordNumber, puis il définit le mot suivant à controlNum (qui est la chaîne I Je cherche à revenir).Trouver le mot suivant après une chaîne

public string ABSFindControlNumber(List<tessnet2.Word> wordList) 
     { 
    for (int i = 0; i < wordList.Count; i++) 
        { 
         if (wordList[i].Text == "Control Number:" && wordList[i].Confidence >= 50) 
         { 

          string wordNumber = wordList[i].Text.ToString(); 
          controlNum = wordList[i + 1].Text.ToString(); 
          return controlNum; 
     } 
     } 
} 

Mais après avoir découvert comment faire avec une approche similaire en utilisant RegEx. Je veux voir s'il y a un moyen de régler controlNum sur le mot suivant. J'ai quelques cas différents pour certaines lettres/chiffres juste au cas où il ne trouve pas le mot exact.

if (Regex.IsMatch(text, @"c(0|o)ntr(0|o)(l|1|i)\s+nu(in|m)ber(:|;|s)", RegexOptions.IgnoreCase)) 
{ 
       controlNum = ??? 
} 

Répondre

1

Vous pouvez le faire:

string text = "Control Number: 123foobar"; 
var match = Regex.Match(text, @"c[o0]ntr[o0][l1i]\s+nu(?:in|m)ber[:;s]\s*(\w*)", RegexOptions.IgnoreCase); 
if (match.Success) 
{ 
    var controlNum = match.Groups[1].Value; // 123foobar 
} 
+0

Cela ne semble pas fonctionner tout à fait exact. Si je laisse le code exactement comme vous l'avez, controlNum sera '123foobar'. Cependant, si je supprime '123foobar' du 'string texte' alors controlNum sera juste" ". ... Je ne connaîtrai pas le numéro de contrôle avant cette fonction. – MaylorTaylor

+0

@MaylorTaylor Vraisemblablement, vous lisez un bloc de texte à partir de * quelque part *, puis essayez de l'analyser pour obtenir le numéro de contrôle, n'est-ce pas? Eh bien, mon 'text =" Control Number: 123foobar "' est juste un exemple d'entrée à des fins de démonstration. Vous devriez obtenir cela à partir du texte que vous essayez de lire. –

Questions connexes