3 votes

Veuillez traduire ceci en conservant les mêmes balises HTML s'il y en a de l'anglais au français : Faites correspondre le début ou la fin de la chaîne - mais spécifiez le modèle une seule

D'accord, il s'agit principalement d'une question intellectuelle (ou d'une amélioration).

J'ai un motif qui doit correspondre soit au début SOIT à la fin de la chaîne (ou aux deux).

(Ici j'utilise simplement 'abcd' comme motif, mais dans le monde réel, c'est un motif plutôt long et complexe. Cependant, ce n'est pas intéressant, car cela fonctionne).

Comme d'habitude j'utilise cette regex :

@"^abcd|abcd$"

Ici, le motif est dupliqué, une fois pour le début et une fois pour la fin de la chaîne.

Cependant, étant donné que le motif est long et compliqué, je voudrais le spécifier qu'une seule fois dans la chaîne. Cela faciliterait la lecture ainsi que la maintenance - je n'aurais qu'un seul endroit à modifier.

Les regex suivantes ne fonctionnent évidemment pas, mais donnent une idée de ce que je veux :

@"^abcd$" - correspond uniquement exactement à 'abcd'
@"^?abcd$?" - correspond également à 'abcd' au milieu

Donc, la question est :

Y a-t-il un moyen de correspondre soit au début soit à la fin de la chaîne et de ne spécifier le motif interne qu'une seule fois?

5voto

Wiktor Stribiżew Points 100073

```html

Vous pouvez utiliser

(^)?abcd(?(1)|$)

Consultez la démonstration regex.

Détails

  • (^)? - un groupe de capture facultatif, sa valeur sera une chaîne vide si la position a été trouvée ou null sinon
  • abcd - votre valeur
  • (?(1)|$) - une construction conditionnelle : si la valeur du Groupe 1 n'est pas null (si elle a été trouvée) alors ne faites rien, sinon, faites correspondre la fin de la chaîne.

Consultez la démonstration C#:

var strings = new List { "1 abcd", "abcd 1", "1 abcd 1"};
var pattern = "(^)?abcd(?(1)|$)";
foreach (var s in strings)
{
    Console.WriteLine("{0} => {1}", s, Regex.IsMatch(s, pattern));
}

Résultat:

1 abcd => True
abcd 1 => True
1 abcd 1 => False

```

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