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.