¿Cuál es el equivalente de patrón .gitignore de la expresión regular (Grande | Pequeño) (Estado | Ciudad) - [0-9] * \. Csv

23

Tengo una expresión regular que pegué en mi .gitignoresimilar a:

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

No funcionó, así que lo probé contra RegexLab.NET .

Luego encontré la página de manual de gitignore que me llevó a aprender que gitignore no usa expresiones regulares, sino más bien fnmatch (3) .

Sin embargo, fnmatch no parece tener un equivalente de los grupos de captura. ¿Es esto factible o necesito dividir esto en tres líneas?

Justin Dearing
fuente

Respuestas:

26

No hay forma de expresar esta expresión regular con los patrones que admite gitignore. El problema no es la falta de grupos de captura (de hecho, no está utilizando grupos de captura como tales), el problema es la falta de un |operador. Necesitas dividir esto en cuatro líneas.

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

Tenga en cuenta que los patrones coinciden BigState-4foo.csv, por ejemplo , ya que *coincide con cualquier secuencia de caracteres. No puede hacerlo mejor que esto con patrones globales, a menos que esté dispuesto a hacer coincidir solo un número fijo de dígitos.

Gilles 'SO- deja de ser malvado'
fuente
2
Terminé haciendo exactamente lo que dijiste. Además, gracias por señalar * no repite la expresión anterior, pero es una tarjeta while. Es lo suficientemente bueno para mis necesidades, pero esperaba algo mejor.
Justin Dearing