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 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. P> p>
4 Réponses :
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 d'ailleurs, ce qui précède si-d'autre peut être remplacé par endswith (". Req.copied") code>. System.out.println (test1.endswith (". Req.copied")? "Correspondances": "ne correspond pas"); Code>. P> P> P>
test1.matches (". * \\. REQ \\ correspond à code>. p>
Assurez-vous d'échapper au . Code> comme \\. Code>
Vous devriez proposer une regex qui correspondrait au format de la chaîne entière, pas un extrait: aussi, votre format utilisait (req.copied)? code>, qui correspondrait à tout cas. En outre, . Code> correspond à n'importe quel caractère, alors échappez-le à assortir un point. P> p>
Problème principal avec Si vous souhaitez vraiment utiliser Mais dans votre cas, vous devez simplement utiliser Correspondances CODE> Voici qu'elle nécessite de regex pour correspondre entière de chaîne em>. Mais dans votre cas, votre regex décrit seulement partie em> de celui-ci. correspondant code> ici, votre code pourrait ressembler davantage à p>
. code> représente n'importe quel caractère (sauf les séparateurs de ligne tels que \ r code>), 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 "\\." code> parce que \ code> a également une signification particulière, comme créer des caractères spéciaux \ r Code> \ n code> \ t code> et ainsi de suite - afin qu'il nécessite également de s'échapper via un supplémentaire code>). LI>
. * code> permettra à Regex accepter tous les caractères avant .req.copied code> li>
ul> findswith code> méthode p>
Merci Pshemo! J'utilisais une seule barre oblique avant que le point ne désigne le caractère littéral, c'était mon erreur.
Pourquoi pas seulement
string.endswith (". Req.copied"); code>?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 () code>". + 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 code> à tout le monde ... Utiliser la petite flèche à la suite des réponses est la manière désignée de le faire ;-)