2009-12-29 5 views
1

Je dois supprimer certains caractères à la fin d'une certaine liste d'éléments. Ces caractères sont toujours les mêmes (C, CD, PDF, CPDF, M) et avec cette expression régulière, je suis en mesure de se débarrasser d'eux:Java Expression régulière

str.replaceAll("(C|CD|PDF|CPDF|M)$", ""); 

Cependant, je ne suis pas en mesure d'inverser cette expression : J'aimerais pouvoir isoler (en supprimant le reste de la chaîne, par exemple) n'importe lequel de ces codes, s'ils sont à la fin de la chaîne. J'ai essayé ceci:

str.replaceAll("!(C|CD|PDF|CPDF|M)$", "");

Je reçois probablement à l'aide des fonctions de chaîne, mais je suis sûr qu'il est possible en utilisant uniquement l'expression régulière.

+3

Que voulez-vous dire par 'inverser cette expression? Qu'est-ce que vous essayez réellement d'accomplir? – AlBlue

+0

Il semble qu'il veut supprimer tous les suffixes qui ne sont pas dans cet ensemble. Cependant, cela n'a pas de sens, alors je ne suis pas sûr. – SLaks

+0

une conjecture sauvage, je dirais qu'il veut savoir ce qu'il a effectivement enlevé. –

Répondre

5

Vous utilisez déjà une parenthèse pour capturer le groupe correspondant, référencez simplement ce groupe.

Matcher m = Pattern.compile("(C|CD|PDF|CPDF|M)$").matcher("165N1JCD"); 
    while (m.find()) { 
     System.out.println(m.group(1)); // prints out "CD" 
    } 
2

Comme Josh Hight, à l'exception du regexp qui permettent d'obtenir les deux parties

Matcher m = Pattern.compile("(.*)(C|CD|PDF|CPDF|M)$").matcher("165N1JCD"); 
    while (m.find()) { 
     System.out.println(m.group(1)); // prints out "165N1J" 
     System.out.println(m.group(2)); // prints out "CD" 
    } 
0

Vous pouvez utiliser la classe Matcher pour saisir un groupe spécifique (le suffixe vous supprimez) et effectuer la replaceAll opération. Une autre option serait de faire en sorte que votre expression ait deux groupes, celui que vous avez et l'autre avant tout.

0

Si vous ne souhaitez pas utiliser la classe Matcher, vous pouvez coller avec replaceAll:

str.replaceAll(".*(C|CD|PDF|CPDF|M)$", "$1");