22 votes

C# chaîne commence par un nombre regex

J'ai cherché pendant un certain temps comment confirmer qu'une chaîne de caractères commence par un chiffre. Je suis tombé sur une instruction regex '/^ \d /' qui, je le confirme, dit que si ça commence par un chiffre. Cependant, je ne parviens pas à le faire fonctionner dans le code ci-dessous. Où est-ce que je me suis trompé dans l'instruction 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) :
TicketID Status URL InitCats PostRevCats ListNumClosed 555555 Fermé http://5555555.com/searcho Sites malveillants 55555

68voto

Darin Dimitrov Points 528142

Votre expression est fausse. /.../ est une convention javascript pour définir des expressions régulières. Essayez comme ceci en C# :

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

Notez également que vous devez utiliser l'option IsMatch qui renvoie un booléen ou votre code ne sera même pas compilé.

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

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

39voto

agent-j Points 14703

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

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

Si vous souhaitez utiliser l'expression rationnelle, supprimez l'élément // donc c'est juste Regex.IsMatch(info,@"^\d") .

4voto

Kazar Points 16014

C'est le format de la chaîne que vous avez fourni à Regex.Match.

Le format correct serait :

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

Le @ signifie que les caractères d'échappement (comme la barre oblique inversée) sont traités comme des caractères normaux. Sans cela, votre regex devrait être "^\\d" .

1voto

erlando Points 5802

Votre expression est erronée. .Net n'utilise pas d'expressions de style perl. L'expression correcte est @"^ \d ".

Et vous devriez utiliser Regex.IsMatch(...) si vous n'avez pas l'intention d'utiliser la MatchCollection de .Match pour quoi que ce soit :

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

0voto

Yogurt The Wise Points 1186

Si vous essayez seulement de savoir si la chaîne commence par un chiffre. Comme ci-dessus, vous pouvez éviter d'utiliser les expressions rationnelles. Utilisez simplement Substring, supprimez le premier caractère et testez si c'est un nombre.

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X