O que é o equivalente ao padrão .gitignore da regex (Grande | Pequena) (Estado | Cidade) - [0-9] * \. Csv

23

Eu tenho uma regex que colei no meu .gitignoresemelhante a:

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

Como não funcionou, testei-o no RegexLab.NET .

Então eu encontrei a página do manual gitignore que me levou a aprender que o gitignore não usa regexes , mas sim o fnmatch (3) .

No entanto, fnmatch não parece ter um equivalente dos grupos de captura. Isso é viável ou preciso dividir isso em três linhas?

Justin Dearing
fonte

Respostas:

26

Não há como expressar essa expressão regular com os padrões que o gitignore suporta. O problema não é a falta de grupos de captura (na verdade, você não está usando grupos de captura como tal), o problema é a falta de um |operador. Você precisa dividir isso em quatro linhas.

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

Observe que os padrões correspondem BigState-4foo.csv, por exemplo , uma vez que *corresponde a qualquer sequência de caracteres. Você não pode fazer melhor do que isso com padrões glob, a menos que esteja disposto a corresponder apenas a um número fixo de dígitos.

Gilles 'SO- parar de ser mau'
fonte
2
Acabei fazendo exatamente o que você disse. Além disso, obrigado por apontar * não repete a expressão anterior, mas é um cartão while. É bom o suficiente para as minhas necessidades, mas eu estava esperando por melhor.
Justin Dearing