Quel est l'équivalent du modèle .gitignore de l'expression régulière (grande | petite) (état | ville) - [0-9] * \. Csv

23

J'ai un regex que j'ai coincé dans mon .gitignoresemblable à:

(Big|Small)(State|City)-[0-9]*\.csv

Cela n'a pas fonctionné, je l'ai donc testé contre RegexLab.NET .

J'ai ensuite trouvé la page de manuel de gitignore qui m'a amené à apprendre que gitignore n'utilise pas d'expressions régulières, mais plutôt fnmatch (3) .

Cependant, fnmatch ne semble pas avoir un équivalent des groupes de capture. Est-ce faisable ou dois-je le diviser en trois lignes?

Justin Dearing
la source

Réponses:

26

Il n'y a aucun moyen d'exprimer cette expression régulière avec les motifs pris en charge par gitignore. Le problème n'est pas le manque de groupes de capture (en fait, vous n'utilisez pas les groupes de capture en tant que tels), le problème est le manque d' |opérateur. Vous devez diviser cela en quatre lignes.

BigState-[0-9]*.csv
SmallState-[0-9]*.csv
BigCity-[0-9]*.csv
SmallCity-[0-9]*.csv

Notez que les motifs correspondent par exemple BigState-4foo.csv, car *correspond à n'importe quelle séquence de caractères. Vous ne pouvez pas faire mieux que cela avec des modèles globaux, à moins que vous ne vouliez correspondre qu'à un nombre fixe de chiffres.

Gilles 'SO- arrête d'être méchant'
la source
2
J'ai fini par faire exactement ce que tu as dit. De plus, merci d'avoir souligné * ne répète pas l'expression précédente, mais est une carte de temps. C'est assez bon pour mes besoins, mais j'espérais mieux.
Justin Dearing