English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Expressions régulières C#

Expression régulière C'est un modèle de correspondance pour le texte d'entrée.

Le cadre .Net fournit un moteur d'expression régulière permettant ce type de correspondance.

Le motif est composé d'un ou plusieurs caractères, opérateurs et structures.

Définir l'expression régulière

Le tableau suivant liste les caractères, opérateurs et structures utilisés pour définir les expressions régulières.

  • Échappement de caractères

  • Classe de caractères

  • Points de repère

  • 分组构造

  • Quantifier

  • Backreference construction

  • Alternative construction

  • Remplacement

  • Constructions d'articles

Échappement de caractères

Le caractère de barre oblique inverse () dans l'expression régulière indique que le caractère suivant est un caractère spécial, ou que ce caractère doit être interprété littéralement.

Le tableau suivant liste les caractères d'échappement :

Caractères d'échappementDescriptionModèleMatch
\aCorrespond au symbole d'alarme (bell) \u0007 Correspond.\aAttention ! + '\u0007' contient "\u0007"
\bDans une classe de caractères, correspond à la touche d'effacement \u0008 Correspond.[\b]{3,}Dans "\b\b\b\b" correspond à "\b\b\b\b"
\tCorrespond à la tabulation \u0009 Correspond.(\w+)\tDans "Name\tAddr\t" correspond à "Name\t" et "Addr\t"
\rCorrespond au retour chariot \u000D. (\r et \n ne sont pas équivalents.).\r\n(\w+)Dans "\r\nHello\nWorld." correspond à "\r\nHello"
\vCorrespond à la tabulation verticale \u000B.[\v]{2,}Dans "\v\v\v" correspond à "\v\v\v"
\fCorrespond à la page de contrôle \u000C.[\f]{2,}Dans "\f\f\f" correspond à "\f\f\f"
\nCorrespond au retour chariot \u000A.\r\n(\w+)Dans "\r\nHello\nWorld." correspond à "\r\nHello"
\eCorrespond à l'escape \u001B Correspond.\e"\x001Dans B" correspond à "\x001B"
\ nnnSpécifiez un caractère en utilisant une représentation octale (nnn est composé de deux à trois chiffres).\w\040\wDans "a bc d", correspond à "a b" et "c d"
\x nnSpécifiez un caractère en utilisant une représentation hexadécimale (nn est composé de deux chiffres).\w\x20\wDans "a bc d", correspond à "a b" et "c d"
\c X \c xCorrespond à X ou x, le caractère de contrôle ASCII spécifié, où X ou x est la lettre du caractère de contrôle.\cC"\x0003" contient "\x0003" (Ctrl-C)
\u nnnnCorrespond à un caractère Unicode (représenté par un quaternaire de quatre chiffres).\w\u0020\wDans "a bc d", correspond à "a b" et "c d"
\Correspond au caractère suivant après un caractère d'échappement non reconnu.\d+[\+-x\*]\d+\d+[\+-x\*\d+" (2+2) * 3*9" with "2+2" et "3*9"

Classe de caractères

Une classe de caractères correspond à tout caractère d'un ensemble de caractères.

Le tableau suivant liste les classes de caractères :

Classe de caractèresDescriptionModèleMatch
[character_group]Correspond à tout caractère individuel du character_group. Par défaut, la correspondance est sensible à la casse.[mn]Le "m" dans "mat", le "m" et le "n" dans "moon"
[^character_group]Non : correspond à aucun caractère individuel extérieur au character_group. Par défaut, les caractères du character_group sont sensibles à la casse.[^aei]"avail" de "v" et "l"
[ first - last ]Portée de caractères : Correspond à tout caractère dans la gamme de first à last.[b-d][b-d]irds peut correspondre à Birds, Cirds, Dirds
.Caractère générique : Correspond à tout caractère sauf \n.
Pour correspondre à l'original point décimal (.2E), vous devez ajouter un antiséparateur de caractères (\.) avant ce caractère.
a.e"have" de "ave" dans "mate" de "ate"
\p{ name }Correspond à name Correspond à tout caractère d'une catégorie universelle Unicode ou d'un bloc nommé spécifié.\p{Lu}"City Lights" de "C" et "L"
\P{ name }Correspond à tout caractère qui n'est pas name Correspond à tout caractère d'une catégorie universelle Unicode ou d'un bloc nommé spécifié.\P{Lu}"City" de "i" de "t" et "y"
\wCorrespond à tout caractère mot.\w"Room#1de "R" de "o" de "m" et "1"
\WCorrespond à tout caractère non mot.\W"Room#1" de "#"
\sCorrespond à tout caractère blanc.\w\s"ID A1.3" de "D "
\SCorrespond à tout caractère non blanc.\s\S"int __ctr" de " _"
\dCorrespond à tout nombre décimal.\d"4 = IV" de "4"
\DCorrespond à tout caractère qui n'est pas un nombre décimal.\D"4 = IV" de " "de " "de " "I" et "V"

Points de repère

Les points de repère ou les prédicats atomiques de zéro largeur peuvent réussir ou échouer en fonction de la position actuelle dans la chaîne, mais ils ne font pas avancer l'engine dans la chaîne ou utiliser des caractères.

Le tableau suivant liste les points de repère :

PrédicatDescriptionModèleMatch
^La correspondance doit commencer à la fin de la chaîne ou à la fin d'une ligne.^\d{3}"567-777-" with "567"
$La correspondance doit apparaître à la fin de la chaîne ou à la fin d'une ligne ou après la fin de la chaîne \n avant.-\d{4}$"8-12-2012" with "-2012"
\ALa correspondance doit apparaître au début de la chaîne.\A \w{4}"Code-007-"dans " Code"
\ZLa correspondance doit apparaître à la fin de la chaîne ou après la fin de la chaîne \n avant.-\d{3}\Z"Bond-901-007" with "-007"
\zLa correspondance doit apparaître à la fin de la chaîne.-\d{3}\z"-901-333" with "-333"
\GLa correspondance doit apparaître à l'endroit où la précédente correspondance s'est terminée.\G \( \d \)" (1) (3) (5]7]9) "dans " (1) "de " (3)" et "("5)"
\b匹配一个单词边界,也就是指单词和空格间的位置。er\b匹配"never"中的"er",但不能匹配"verb"中的"er"。
\B匹配非单词边界。er\B匹配"verb"中的"er",但不能匹配"never"中的"er"。

分组构造

分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。

下表列出了分组构造:

分组构造DescriptionModèleMatch
( subexpression )捕获匹配的子表达式并将其分配到一个从零开始的序号中。(\w)1"deep" 中的 "ee"
(?< name >subexpression)将匹配的子表达式捕获到一个命名组中。(?< double>\w)\k< double>"deep" 中的 "ee"
(?< name1 -name2 >subexpression)定义平衡组定义。(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$"3+2^((1-3)*(3-1))" 中的 "(("1-3)*(3-1))"
(?: subexpression)定义非捕获组。Write(?:Line)?"Console.WriteLine()" 中的 "WriteLine"
(?imnsx-imnsx:subexpression)应用或禁用 subexpression 中指定的选项。A\d{2}(?i:\w+)\b"A12xl A12XL a12xl" 中的 "A12xl" et "A12XL"
(?= subexpression)零宽度正预测先行断言。\w+(?=\.)"He is. The dog ran. The sun is out." 中的 "is"、 "ran" et "out"
(?! subexpression)零宽度负预测先行断言。\b(?!un)\w+\b"unsure sure unity used" 中的 "sure" et "used"
(?<=subexpression)零宽度正回顾后发断言。(?A+B+)"1ABB 3ABBC 5AB 5AC" 中的 "1ABB"、 "3ABB" et "5AB"
using System;
using System.Text.RegularExpressions;
public class Example
{
   public static void Main()
   {
      string input = "1851 1999 1950 1905 2003";
      string pattern = @"(?<=19)\d{2};
      foreach (Match match in Regex.Matches(input, pattern))
         Console.WriteLine(match.Value);
   }
}


Run example »

Quantifier

Quantifiers specify how many occurrences of the previous element (which can be a character, group, or character class) must exist in the input string to match the item. Quantifiers include the language elements listed in the table.

The following table lists the quantifiers:

QuantifierDescriptionModèleMatch
*Match the previous element zero or more times.\d*.\d".0", "19.9" and "219.9"
+Match the previous element one or more times."be+""been" with "bee", "bent" with "be"
?Match the previous element zero or one time."rai?n""ran", "rain"
{ n }Match the previous element exactly n times.",\d{3}"1,043.6" with "043"9,876,543,210" with "876" and ",543" and ",210"
{ n ,}Match the previous element at least n times."\d{2,""166" and "29" and "1930"
{ n , m }Match the previous element at least n times, but not more than m times."\d{3,5}"166"17668" "193024" with "19302"
*?Match the previous element zero or more times, but as few times as possible.\d*?\.\d".0", "19.9" and "219.9"
+?Match the previous element one or more times, but as few times as possible."be+?""been" with "be", "bent" with "be"
??Match the previous element zero or one time, but as few times as possible."rai??n""ran", "rain"
{ n }?Match the leading element exactly n times.",\d{3}?""1,043.6" with "043"9,876,543,210" with "876" and ",543" and ",210"
{ n ,}?Match the previous element at least n times, but as few times as possible."\d{2,}?""166" and "29" et "1930"
{ n , m }?Match the previous element between n and m times, but as few times as possible."\d{3,5}?""166"17668" "193024" with "193" and "024"

Backreference construction

Backreference allows to identify previously matched subexpressions later in the same regular expression.

The following table lists the backreference constructions:

Backreference constructionDescriptionModèleMatch
\ numberBackreference. Matches the value of the numbered subexpression.(\w)1"seek" with "ee"
\k< name >Named backreference. Matches the value of the named expression.(?< char>\w)\k< char>"seek" with "ee"

Alternative construction

Alternative construction is used to modify the regular expression to enable either/Match or.

The following table lists the alternative constructions:

Alternative constructionDescriptionModèleMatch
|Match any element separated by the vertical bar (|) character.th(e|is|at)"this is the day. " pour "the" et "this"
(?( expression )oui | non )Correspondre si le schéma d'expression régulière est spécifié par expression oui; sinon correspondre à l'option optionnelle non Partie. expression est interprété comme une assertion de largeur nulle.(?(A)A\d{2})\b|\b\d{3})\b)"A10 C103 910" dans "10" et "910"
(?( name )oui | non )Correspondre si le nom ou le groupe capturé nommé ou numéroté a une correspondance oui; sinon correspondre à l'option optionnelle non.(?< quoted>")?(?(quoted).+?"|\S+\s)"Dogs.jpg "Yiska playing.jpg"" pour "Dogs.jpg" et "Yiska playing.jpg"

Remplacement

Le remplacement est l'expression régulière utilisée dans le modèle de remplacement.

Le tableau suivant liste les caractères utilisés pour le remplacement :

CaractèreDescriptionModèleModèle de remplacementChaîne d'entréeChaîne de résultat
$numberRemplacer par le numéro du groupe number Sous-chaîne correspondante.\b(\w+)(\s)(\w+)\b$3$2$1"one two""two one"
${name}Remplacer par le nom du groupe name Sous-chaîne correspondante.\b(?< word1>\w+)(\s)(?< word2>\w+)\b${word2} ${word1}"one two""two one"
$$Remplacer le caractère "$".\b(\d+)\s?USD$$$1"103 USD""$103"
$&Remplacer une copie de l'ensemble de la correspondance.(\$*(\d*(\.+\d+)?){1)**$&"$1.30""**$1.30**"
$`Remplacer tout le texte de la chaîne d'entrée avant la correspondance.B+$`"AABBCC""AAAACC"
$'Remplacer tout le texte de la correspondance.B+$'"AABBCC""AACCCC"
$+Remplacer le dernier groupe capturé.B+(C+)$+"AABBCCDD"AACCDD
$_Remplacer la chaîne d'entrée entière.B+$_"AABBCC""AAAABBCCCC"

Constructions d'articles

Le tableau suivant liste diverses constructions d'articles :

ConstructionDescriptionExemple
(?imnsx-imnsx)Définir ou désactiver des options telles que la non-sensibilité à la casse au milieu du modèle.\bA(?i)b\w+\b Matcher "ABA Able Act" pour "ABA" et "Able"
(?#commentaire)Commentaire en ligne. Ce commentaire s'arrête au premier parenthèse droite.\bA(?#matcher des mots commençant par A)\w+\b
#}} [Fin de ligne]Ce commentaire commence par un # non échappé et continue jusqu'à la fin de la ligne.(?x)\bA\w+\b#Match les mots commençant par A

Classe Regex

La classe Regex est utilisée pour représenter une expression régulière.

Le tableau suivant liste certains des méthodes couramment utilisées de la classe Regex :

NuméroMéthode & Description
1public bool IsMatch( string input )
Indique si le motif régulier spécifié dans le constructeur Regex est trouvé dans la chaîne d'entrée spécifiée.
2public bool IsMatch( string input, int startat )
Indique si le motif régulier spécifié dans le constructeur Regex est trouvé dans la chaîne d'entrée spécifiée, en commençant à partir de la position spécifiée dans la chaîne.
3public static bool IsMatch( string input, string pattern )
Indique si le motif régulier spécifié dans le constructeur Regex est trouvé dans la chaîne d'entrée spécifiée.
4public MatchCollection Matches( string input )
Recherchez toutes les correspondances du motif régulier dans la chaîne d'entrée spécifiée.
5public string Replace( string input, string replacement )
Remplacez toutes les chaînes correspondantes au motif régulier dans la chaîne d'entrée spécifiée par la chaîne de remplacement spécifiée.
6public string[] Split( string input )
Divisez la chaîne d'entrée en tableau de sous-chaînes en fonction de la position définie par le motif régulier dans le constructeur Regex.

Pour obtenir la liste complète des propriétés de la classe Regex, veuillez consulter la documentation C# de Microsoft.

Exemple 1

Le exemple suivant matche les mots commençant par 'S' :

Exemple en ligne

using System;
using System.Text.RegularExpressions;
namespace RegExApplication
{
   class Program
   {
      private static void showMatch(string text, string expr)
      {
         Console.WriteLine("L'expression : " + expr);
         MatchCollection mc = Regex.Matches(text, expr);
         foreach (Match m in mc)
         {
            Console.WriteLine(m);
         }
      }
      static void Main(string[] args)
      {
         string str = "Un millier de soleils éclatants";
         Console.WriteLine("Correspondance des mots commençant par 'S': ");
         showMatch(str, @"\bS\S*");
         Console.ReadKey();
      }
   }
}

Lorsque le code suivant est compilé et exécuté, il produit le résultat suivant :

Correspondance des mots commençant par 'S':
L'Expression: \bS\S*
Splendid
Suns

Exemple 2

Voici un exemple de correspondance des mots commençant par 'm' et se terminant par 'e':

using System;
using System.Text.RegularExpressions;
namespace RegExApplication
{
   class Program
   {
      private static void showMatch(string text, string expr)
      {
         Console.WriteLine("L'Expression: " + expr);
         MatchCollection mc = Regex.Matches(text, expr);
         foreach (Match m in mc)
         {
            Console.WriteLine(m);
         }
      }
      static void Main(string[] args)
      {
         string str = "make maze and manage to measure it";
         Console.WriteLine("Correspondance des mots commençant par 'm' et se terminant par 'e':");
         showMatch(str, @"\bm\S*e\b");
         Console.ReadKey();
      }
   }
}

Lorsque le code suivant est compilé et exécuté, il produit le résultat suivant :

Correspondance des mots commençant par 'm' et se terminant par 'e':
L'Expression: \bm\S*e\b
make
maze
manage
measure

Exemple 3

Voici un exemple de remplacement des espaces supplémentaires :

using System;
using System.Text.RegularExpressions;
namespace RegExApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         string input = "Hello   World   ";
         string pattern = "\\s"+";
         string replacement = " ";
         Regex rgx = new Regex(pattern);
         string result = rgx.Replace(input, replacement);
         Console.WriteLine("Chaîne originale : {0}", input)
         Console.WriteLine("Chaîne de remplacement : {0}", result);    
         Console.ReadKey();
      }
   }
}

Lorsque le code suivant est compilé et exécuté, il produit le résultat suivant :

Chaîne originale : Hello     World   
Chaîne de remplacement : Hello World