Expressions rationnelles
|
var match = Regex.Match("texte", @"expression rationnelle");
if (match.Success) // test si une correspondance a été trouvée
{
match.Value; // valeur de la correspondance au format string
}
// multiples occurrences
foreach (Match match in regex.Matches("texte", @"expression rationnelle"))
{
Console.WriteLine(match.Value);
}
// use OfType<Match>() to get IEnumerable<Match> from MatchCollection
regex.Matches("texte", @"expression rationnelle").OfType<Match>().Select(x => x.Value);
// Supprimer ou remplacer une expression rationnel
var newString = Regex.Replace("texte original",
@"expression rationnelle (groupe) (groupe)",
"valeur de remplacement $1 $2");
|
|
Les double quotes dans un verbatim string literal (@"") sont échappés avec un autre double quote. |
Groupes
|
var match = Regex.Match("texte", @"\w(?<groupe1>\w)\w(?<groupe2>\w)\w");
if (match.Success) // test si une correspondance a été trouvée
{
match.Groups["groupe1"].Success; // true
match.Groups["groupe1"].Value; // "e"
match.Groups["groupe2"].Value; // "t"
match.Groups["groupe3"].Success; // false
match.Groups["groupe3"].Value; // ""
}
else
{
match.Groups["groupe1"].Success; // false
match.Groups["groupe1"].Value; // ""
}
|
|
Regex.Replace(input, pattern, "", RegexOptions.IgnoreCase);
// ^ correspond au début de ligne et \r$ à la fin de ligne, au lieu de début de texte et fin de texte
Regex.Replace(input, @"^pattern\r$", RegexOptions.Multiline);
// . correspond à tous les caractères, au lieu de tous les caractères sauf \n
Regex.Replace(input, pattern, RegexOptions.Singleline);
// plusieurs options
Regex.Replace(input, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
|
u |
utf8 \w inclut les accents
|
i |
recherche insensible à la casse
|
Compiled
|
private static readonly Regex AlphanumRegex = new(@"^[a-zA-Z0-9][a-zA-Z0-9 ]+$", RegexOptions.Compiled);
|
La création de l'expression prend 10x plus de temps, mais améliore la rapidité d'utilisation de 30%.
Aide-mémoire
. |
Joker : n'importe quel caractère sauf \n
|
[abc] |
Un caractère parmi a, b ou c
|
[^abc0-9] |
Un caractère qui n'est pas a, b, c et 0 à 9
|
[a-z] |
Un caractère dans la liste allant de a à z
|
[a-zA-Z] |
Un caractère dans la liste allant de a à z ou dans la liste allant de A à Z
|
\s |
N'importe quel caractère d'espacement. Équivalent à [ \n\r\t\v\f]
|
\w |
N'importe quel caractère alphanumérique. Équivalent à [a-zA-Z0-9_]
|
\d |
N'importe quel chiffre décimal. Équivalent à [0-9]
|
\b |
chaîne vide au début ou à la fin d'un mot. \bmot\b correspond à mot.
|
\S \W \D \B |
Opposés de \s \w \d \b(chaîne vide mais pas au début ou à la fin d'un mot)
|
(a|b) |
a ou b
|
x? |
0 ou 1 fois x
|
x* |
0 ou plusieurs fois x
|
x+ |
Au moins 1 fois x
|
x{6} |
6 fois x
|
x{3,6} |
Entre 3 et 6 fois x
|
x{6,} |
Au moins 6 fois x
|
^... |
Commence par ...
|
...$ |
Se termine par ...
|
*?,+?,??,{m,n}? |
Mode minimal pour *, +, ? et {}. Donne la correspondance avec le moins de caractères possible.
|
(?:...) |
Parenthèses de non-capture. Pas de création de groupes ni de backreferences. Améliore les performances de l'expression rationnelle.
|
(?=...) |
Assertion look-ahead, correspond si la position actuelle dans la chaîne de caractères est suivie par ... Exemple: "Isaac(?=Asimov)" correspondra à "Isaac" seulement si il suivi de "Asimov".
|
(?!...) |
Assertion look-ahead négative, correspond si la position actuelle dans la chaîne de caractères n'est pas suivie par ...
|
(?<=...) |
Assertion look-behind, correspond si la position actuelle dans la chaîne de caractères est précédée par ... Exemple: "(?<=abc)def" correspondra à "def" seulement si il est précédé par "abc". La condition d'assertion doit correspondre a une chaîne de caractères de longueur fixe, ce qui signifie que abc ou a|b sont permis, mais a* ne l'est pas.
|
(?<!...) |
Assertion look-behind négative, correspond si la position actuelle dans la chaîne de caractères n'est précédée par ...
|
^((?!XXX).)*$ |
toutes les lignes qui ne contiennent pas XXX
|
Tests online