Question

J'ai cherché depuis un petit moment pour comprendre comment confirmer qu'une chaîne commence par un numéro. Je suis tombé sur une déclaration regex '/ ^ d /' que je peux confirmer dit si cela commence par le chiffre. Cependant, je ne peux pas sembler le faire fonctionner dans le code ci-dessous. Où ai-je mal tourné dans la déclaration if(Regex.Match(info,"/^\d/"))?

//String attachbody is the attachment body from an email C read into a string
string[] data = Regex.Split(attachbody, "\n");

foreach (String info in data)
{
    if (Regex.Match(info,"/^\d/"))
    {
        string[] tabbedHeaderData = Regex.Split(info, "\t");
        TicketID = tabbedHeaderData[0].ToString();
        Status = tabbedHeaderData[1].ToString();
        URL = tabbedHeaderData[2].ToString();
        InitCats = tabbedHeaderData[3].ToString();
        PostRevCats = tabbedHeaderData[4].ToString();
        ListNumClosed = tabbedHeaderData[5].ToString();

        Console.WriteLine(TicketID);
        Console.WriteLine(Status);
        Console.WriteLine(URL);
        Console.WriteLine(InitCats);
        Console.WriteLine(PostRevCats);
        Console.WriteLine(ListNumClosed);
        Console.ReadLine();
    }
}

Exemple de données (TAB délimité):
TicketId Status URL Initcats Postrevcats ListNumClosed 555555 fermé http://5555555.com/searcho Sites malveillants 55555

Était-ce utile?

La solution

Votre regex est faux. /.../ est la convention JavaScript pour définir des expressions régulières. Essayez comme ça dans C #:

if (Regex.IsMatch(info, @"^\d"))

Notez également que vous devez utiliser le Ismatch Méthode qui renvoie Boolean ou votre code ne compile même pas.

Et si vous vouliez faire correspondre que la chaîne commence par un ou plusieurs chiffres:

if (Regex.IsMatch(info, @"^\d+"))

Autres conseils

Vous n'avez pas besoin d'un regex pour cela. Essayer

if (info.Length > 0 && char.IsDigit(info[0]))
{
   ...
}

Si vous souhaitez utiliser le regex, retirez le // Alors c'est juste Regex.IsMatch(info,@"^\d").

C'est le format de la chaîne que vous avez fournie à regex.match.

Le format correct serait:

Regex.Match(info,@"^\d")

Le @ signifie que les personnages d'échappement (comme la barre oblique) sont traités comme des personnages normaux. Sans ça, votre regex devrait être "^\\d".

Votre regex est faux. .NET n'utilise pas les regex de style perl. L'expression correcte est @ "^ d".

Et vous devez utiliser regex.ismatch (...) si vous n'utilisez pas la MatchCollection de .match pour quoi que ce soit:

RegEx.IsMatch(info, @"^\d")

Si vous n'essayez que si la chaîne commence par un numéro. Comme ci-dessus, vous canskip à l'aide de regex. Utilisez simplement la sous-chaîne, supprimez le premier caractère et testez s'il s'agit d'un nombre.

Maintenant, si vous essayez de supprimer l'intégralité du numéro, je convertirais la chaîne en un tableau de char et testerais les caractères.

Pseudo String S = "" Pour chaque C dans Chars {Si C est le nombre, alors s + = C else Sortez pour} Convertit le S en un entier, vous avez obtenu le nombre au début de la chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top