web-dev-qa-db-fra.com

La chaîne C # commence par un nombre regex

Je cherche depuis un moment à savoir comment confirmer qu'une chaîne commence par un nombre. Je suis tombé sur une déclaration regex '/ ^\d /' qui, je le confirme, indique si commence par digit. Cependant, je n'arrive pas à le faire fonctionner dans le code ci-dessous. Où est-ce que je me suis trompé 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 (délimité par des tabulations):
URL du statut du ticketID InitCats PostRevCats ListNumClosed 555555 Fermé http://5555555.com/searcho Sites malveillants 55555

16
toosweetnitemare

Votre regex est faux. /.../ est une convention javascript permettant de définir des expressions régulières. Essayez comme ça en C #:

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

Notez également que vous devez utiliser la méthode IsMatch qui retourne un booléen sinon votre code ne sera pas compilé.

Et si vous voulez que cela corresponde, la chaîne commence par un ou plusieurs chiffres:

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

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

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

Si vous voulez utiliser l'expression rationnelle, extrayez le //, donc c'est simplement Regex.IsMatch(info,@"^\d").

29
agent-j

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 caractères d'échappement (comme la barre oblique inverse) sont traités comme des caractères normaux. Sans cela, votre expression rationnelle devrait être "^\\d".

4
Kazar

Votre regex est faux. .Net n'utilise pas de regex de style Perl. L'expression correcte est @ "^\d".

Et vous devriez utiliser Regex.IsMatch (...) si vous n'allez pas utiliser MatchCollection à partir de .Match pour quoi que ce soit:

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

Si vous essayez uniquement de savoir si la chaîne commence par un nombre. Comme ci-dessus, vous pouvez utiliser une expression rationnelle. Utilisez simplement Substring, supprimez le premier caractère et testez s’il s’agit d’un nombre.

Maintenant, si vous essayez de supprimer le nombre entier, alors je convertirais la chaîne en tableau de caractères et testerais les caractères.

pseudo chaîne s = "" pour chaque c dans les caractères { si c est un nombre, alors s + = c sinon exit pour } convertir le s en un entier, vous avez le nombre au début de la chaîne.

0
Yogurt The Wise