2011-09-09 6 views
1

Je fais face à un problème simple je suppose.Expression régulière pour correspondre à des noms de fichiers

J'ai un rapport Cognos qui laisse deux fichiers dans un dossier, après qu'une interface doit prendre l'un des fichiers en fonction du nom de fichier pour commencer à fonctionner.

Le processus de rapport demande à l'utilisateur de définir un nom pour le rapport. Par ex. si je choisis le nom PaymentJournal06.09, il crée ces fichiers:

PaymentJournal 06.09-en-us-xml_desc.xml 
PaymentJournal 06.09-en-us.xml 

je besoin d'une expression régulière pour ramasser seulement le deuxième fichier. J'ai essayé avec PaymentJournal*-en-us.xml mais cela ne fonctionne pas.

Répondre

4

Vous êtes très proche (.). Le . est un caractère spécial dans les expressions régulières qui correspond à un caractère. Donc, où vous avez eu le caractère générique *, vous voulez un .* ou un .+ à la place. Le premier correspond à 0 ou plus de n'importe quel caractère, et le second correspond à 1 ou plus, mais les deux devraient fonctionner pour ce cas. Ensuite, le . que vous avez utilisé doit être échappé, comme \., parce que vous voulez vraiment faire correspondre un . là. Tout mettre ensemble:

PaymentJournal.*-en-us\.xml

+0

Cela fonctionne parfaitement, merci! – Gerardo

6

Avec les expressions régulières, le * n'est pas un joker comme vous en avez l'habitude, mais plutôt un quantificateur qui signifie zéro ou plus. Donc, dans votre exemple:

PaymentJournal*-en-us.xml 

l* signifie zéro ou plusieurs caractères l, qui correspondent à Race:

PaymentJourna-en-us.xml 
PaymentJournal-en-us.xml 
PaymentJournall-en-us.xml 
PaymentJournallll-en-us.xml 
... 

Vous devez utiliser le. caractère qui correspond à quelque chose:

PaymentJournal.*-en-us.xml 

Ou vous pourriez être plus précis:

PaymentJournal \d\d\.\d\d-en-us.xml 

\d correspond à un nombre et \. correspond à une période

+0

En effet. Vous pouvez également ajouter des caractères de début de chaîne et de fin de chaîne à la regex si tout ce que vous utilisez pour la créer les supporte facilement. – bdeniker

+0

Cela fonctionne parfaitement, merci! – Gerardo

Questions connexes