9
votes

Expression régulière pour les extensions de fichiers en Java

J'essaie d'écrire une expression régulière simple pour identifier tous les noms de fichiers dans une liste qui se terminent par ".req.copied" extension. Le code que j'utilise est donné ci-dessous xxx

Les tests de regex OK dans les testeurs de regex en ligne mais ne fonctionne pas dans le programme. J'ai essayé plusieurs combinaisons (comme la fractionnement de req et copié dans deux regexes, ou une correspondance littérale du personnage de points), mais rien ne fonctionne (même la plus simple regex de (REG)? Retourner une sortie "ne correspond pas à" S'il vous plaît laissez-moi savoir comment aborder cela.


5 commentaires

Pourquoi pas seulement string.endswith (". Req.copied"); ?


Certains des fichiers du répertoire ont une extension personnalisée comme ".err" après ".req.copied" (c'est-à-dire "" .req.copied.err "). Mais Ya Endswith résoudra la moitié du problème. Merci résueman.


Vous pouvez utiliser contient ()


". + REQ \ .COPIED (\. ERR)? $" est la bonne regex. La chaîne peut commencer toute façon, mais doit se terminer par req.copied, à l'exception de la possibilité de trouver .err à la fin. N'oubliez pas de vous échapper. (DOT), car il a la signification particulière "tout caractère".


@Mohanvs Vous n'avez pas besoin d'écrire merci à tout le monde ... Utiliser la petite flèche à la suite des réponses est la manière désignée de le faire ;-)


4 Réponses :


2
votes

Comme le dit le resueman dans les commentaires, vous n'avez pas besoin de regex pour cela. Vous pouvez simplement vérifier si chaque nom de fichier endswith (". Req.copied") . xxx

d'ailleurs, ce qui précède si-d'autre peut être remplacé par System.out.println (test1.endswith (". Req.copied")? "Correspondances": "ne correspond pas"); .


0 commentaires

2
votes

test1.matches (". * \\. REQ \\ correspond à .


1 commentaires

Assurez-vous d'échapper au . comme \\.



1
votes

Vous devriez proposer une regex qui correspondrait au format de la chaîne entière, pas un extrait: xxx

aussi, votre format utilisait (req.copied)? , qui correspondrait à tout cas. En outre, . correspond à n'importe quel caractère, alors échappez-le à assortir un point.


0 commentaires

9
votes

Problème principal avec Correspondances Voici qu'elle nécessite de regex pour correspondre entière de chaîne . Mais dans votre cas, votre regex décrit seulement partie de celui-ci.

Si vous souhaitez vraiment utiliser correspondant ici, votre code pourrait ressembler davantage à xxx

  • . représente n'importe quel caractère (sauf les séparateurs de ligne tels que \ r ), donc si vous voulez ne représenter que le point que vous devez échapper comme \. < / code> (dans la chaîne, nous devons l'écrire comme "\\." parce que \ a également une signification particulière, comme créer des caractères spéciaux \ r \ n \ t et ainsi de suite - afin qu'il nécessite également de s'échapper via un supplémentaire ).
  • . * permettra à Regex accepter tous les caractères avant .req.copied

    Mais dans votre cas, vous devez simplement utiliser findswith méthode xxx


1 commentaires

Merci Pshemo! J'utilisais une seule barre oblique avant que le point ne désigne le caractère littéral, c'était mon erreur.