« Expressions rationnelles » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(Une version intermédiaire par le même utilisateur non affichée) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:CSharp]] | [[Category:CSharp]] | ||
= Tests online = | |||
* [https://www.debuggex.com debuggex] | |||
* [https://regex101.com regex101] | |||
* [https://extendsclass.com/regex-tester.html extendsclass regex tester] | |||
= Expressions rationnelles = | = Expressions rationnelles = | ||
<kode lang=csharp> | <kode lang=csharp> | ||
Ligne 9 : | Ligne 14 : | ||
// multiples occurrences | // multiples occurrences | ||
foreach (Match match in | foreach (Match match in Regex.Matches("texte", @"expression rationnelle")) | ||
{ | { | ||
Console.WriteLine(match.Value); | Console.WriteLine(match.Value); | ||
Ligne 121 : | Ligne 126 : | ||
|^((?!XXX).)*$||toutes les lignes qui ne contiennent pas XXX | |^((?!XXX).)*$||toutes les lignes qui ne contiennent pas XXX | ||
|} | |} | ||
Dernière version du 7 novembre 2023 à 22:33
Tests online
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; // "" } |
Options
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 |