J'ai besoin de supprimer [/]00/ de fin d'une chaîne donnée.
Exemples:
\d{2}\/(?=(?:\d{2}\/)+$)
J'ai eu du mal avec ça mais je ne comprends pas vraiment comment supprimer [/] de [/]00 .
Je veux dire, l'expression remplacée doit se terminer par un / .
J'ai essayé avec cette expression:
string: '01/00/00/00/00/00/00/' -> 01 string: '01/02/03/00/00/00/00/' -> 01/02/03 string: '10/25/03/56/00/00/00/' -> 10/25/03/56
Les correspondances sont:
C'est confus pour moi ...
Des idées?
3 Réponses :
Vous pouvez utiliser l'expression régulière /00|(?<=(00))/ qui signifie /00 OU / précédé de 00 .
Démo:
01/00/00/00/00/00/00/ => 01 01/02/03/00/00/00/00/ => 01/02/03 10/25/03/56/00/00/00/ => 10/25/03/56
Production:
public class Main {
public static void main(String[] args) {
String[] arr = { "01/00/00/00/00/00/00/", "01/02/03/00/00/00/00/", "10/25/03/56/00/00/00/" };
for (String s : arr) {
System.out.println(s + " => " + s.replaceAll("/00|(?<=(00))/", ""));
}
}
}
Remarque ?<= Est utilisé pour spécifier une analyse positive .
Alternatif:
01 01/02/03 10/25/03/56
Remarque: Le correcteur de limite '$' sera pris en compte lorsque le drapeau Pattern.MULTILINE est utilisé.
Regex montré dans testbench et contexte:
public static void main(String[] args) {
String input = "01/00/00/00/00/00/00/\n"
+ "01/02/03/00/00/00/00/\n"
+ "10/25/03/56/00/00/00/";
String result = Pattern.compile("/00|/$", Pattern.MULTILINE).matcher(input).replaceAll("");
System.out.println(result);
}
Production:
Pattern.compile("/00|/$", Pattern.MULTILINE).matcher(input).replaceAll("");
Pas besoin de regarder en avant ou en arrière. Recherchez simplement une barre oblique suivie d'un nombre quelconque de 00/ séquences:
str = str.replaceFirst("/(?:00/)*$", "");
Pour de meilleures performances, vous pouvez faire du groupe un groupe sans capture:
str = str.replaceFirst("/(00/)*$", "");
Oui, aucune recherche n'est nécessaire. Fondamentalement, c'est la même chose que ma suggestion , seul le quantificateur * ici est utilisé pour faire correspondre zéro ou plusieurs occurrences de 00/ après / et jusqu'à la fin de la chaîne.
Veuillez partager votre regex actuelle.
Je n'ai pas été en mesure d'écrire une expression de travail minimale
Vous pouvez utiliser:
str = str.replaceFirst("(?:/00)+/?$", "");/(?:00/)+$fera l'affaire .\d{2}\/(?=(?:\d{2}\/)+$)extrait toute séquence de 2 chiffres suivie de 1+ occurrences de 2 chiffres +/jusqu'à la fin de la chaîne.Similaire à cette question, cela ressemble à un autre doublon de cette question, mais avec l'exigence SQL au lieu de l'exigence Regex supprimée.