Introduction aux expression régulière en C#

J’ai fait beaucoup de regex dans ma vie avec le langage de programmation PHP, mais avec le C# je m’aventure dans de nouvelles contrées, le but est de scraper des pages web en C# (nouveau défi !) et de rester dans l’environnement .NET (SQLServer, IIS, WPF etc). Je suppose que vous avez déjà des connaissances élémentaires avec les expressions régulières.

Contenu

Expression régulière en C#

Globalement, c’est la même chose qu’en PHP, mais il y a des subtilités syntaxiques. L’objet de  ce post est plutôt montrer comment écrire une application console pour tester rapidement un script qui va parser des chaine avec du regex. On ne verra sans doute pas de différence vu que ce que je présente est assez élémentaire.

Utiliser IsMatch pour matcher une séquence

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace scraper
{
    class Program
    {
        // http://lgmorand.developpez.com/dotnet/regex/
        static void Main(string[] args)
        {
            // TODO : match, replace, capture
            
            String chaine = "numéro de téléphone est  06 55 32 22";
            String telephone = "06 88 95 31 22";



            Regex matchPhone = new Regex(@"^[\d]+$");

            
            var test = matchPhone.IsMatch(telephone);
            

            Console.WriteLine("le resultat du match est " + remplace);
            Console.ReadLine();
        }
    }
}

Si nous faisons F5 pour lancer cette application, nous aurons comme sortie d’écran :

le resultat du match est False

En effet la chaine telephone est composé d’espace. Pour avoir le résultat à True, il faut enlever les espaces dans le numéro de téléphone (à moins de matcher aussi les espaces).

Utiliser Replace pour remplacer une chaine de caractères

using System;
using System.Text.RegularExpressions;
namespace scraper
{
    class Program
    {
        // http://lgmorand.developpez.com/dotnet/regex/
        static void Main(string[] args)
        {
            // TODO : match, replace, capture

            String chaine = "numéro de téléphone est  06 55 32 22";
            String telephone = "06 88 95 31 22";



            Regex myRegex = new Regex("^[a-z]$");
            Regex matchPhone = new Regex(@"téléphone");

            var remplace = matchPhone.Replace(chaine, "mobile");

            Console.WriteLine("le remplacement regex a donné " + remplace);
            Console.ReadLine();
        }
    }
}

En jouant ce code vous aurez à al sortie le texte « téléphoneé remplacé par mobile.

le remplacement regex a donné : numéro de mobile est  06 55 32 22

La variable « remplace » contient la  nouvelle chaine.

Capturer une chaine

Nous allons maintenant faire ce pour quoi le rege est le plus utile : extraire une chaine satisfaisant une condition et la stocker éventuellement dans une variable.

using System;
using System.Text.RegularExpressions;
namespace scraper
{
    class Program
    {
        // http://lgmorand.developpez.com/dotnet/regex/
        static void Main(string[] args)
        {
            // TODO : match, replace, capture
              String input = "numéro de téléphone est  0655322288";

            Regex matchDigit = new Regex(@"[\d]+");

            // match
            Match match = matchDigit.Match(input);
            if (match.Success)
            {
                string s = match.Groups[1].Value;
                Console.WriteLine("le match regex a donné : " + match);

            } else
            {
                Console.WriteLine("Pas de match trouvé");
            }
            Console.ReadLine();
        }
    }
}

Vous avez en sortie :

le match regex a donné : 0655322288

Maintenant on sait capturer avec des parenthèses (un classique) une chaine, on va passer à l’autre volet du scraping, le téléchargement d’une page web, le tout en C# bien sûr !

PLUS : Capturer avec les groupes nommés

Il vous est possible d’attribuer u nom au groupe que vous avez capturé. C’est pratique. Voyons comment on peut réécrire l’expression régulière de tout à l’heure.

fgfg

 

Retour en haut