0 votes

Regex Help Wanted With Capture Groups (en anglais)

J'essaie d'extraire quelques mots d'une chaîne de caractères. Les deux cas se présentent comme suit :

Case 1: "Group X - Ford Mondeo or similar"
Case 2: "Group X - Ford Mondeo"

Je voudrais une seule expression rationnelle .NET qui capture "Ford Mondeo" dans les deux cas. Ce que j'ai de mieux jusqu'à présent est :

^Group [A-Z] - (?<VehicleModel>.+)(?: or similar)$

qui revient : Cas 1 : " Ford Mondeo " Cas 2 : "" J'ai essayé ceci :

^Group [A-Z] - (?<VehicleModel>.+)(?: or similar)?$

qui revient :

Case 1: ""
Case 2: "Ford Mondeo"

J'essayais de dire zéro ou une occurrence de " ou similaire ". J'ai peut-être besoin d'une expression qui dise "si se termine par "ou similaire", faites ceci ou cela". J'utilise Expresso depuis un bon moment maintenant et je n'arrive pas à mettre le doigt sur ce dont j'ai besoin. Pouvez-vous m'aider ?

2voto

soulmerge Points 37314

Le problème est que .+ dans le VehicleGroup capture trop de choses. Ajoutez un point d'interrogation pour le rendre non gourmand : .+?

1voto

Yannick Motton Points 9806

Essayez ça :

^Group [A-Z] - (?<VehicleModel>.+?)(?: or similar)?$

1voto

^Group [A-Z] - (?<VehicleModel>.+?)(?:or similar)?$

0voto

Kip Points 37013

Enlevez le point-plus :

^Group [A-Z] - (?<VehicleModel>)(?: or similar)?$

Ou alors, essayez ceci :

^Group [A-Z] - (?<VehicleModel>.+?)(?: or similar)?$

Je ne suis pas familier avec ce .net ?<xyz> syntaxe, peut-être qu'il faut le point-plus ? Dans ce cas, .+? le rend non avide, de sorte que le .+ ne mangera pas le " ou similaire ".

0voto

Mark Story Points 596

Selon que vous souhaitez ou non accepter les caractères d'espacement :

/^Group\s[A-Z]\s-\s(?<VehicleModel>.+?)(?:\sor\ssimilar)?$/

capturera le texte avec les caractères d'espacement, y compris les tabulations, et

/^Group [A-Z] - (?<VehicleModel>.+?)(?: or similar)?$/

Ne sera capturé que si le texte utilise des espaces. Comme d'autres l'ont dit, la clé se trouve dans le .+? ce qui rend le groupe de capture non avide. Sans cela, le premier groupe avalera le ou les similaires.

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