J'essaie depuis des heures maintenant d'obtenir une expression régulièrequi correspondra à une quantité inconnue de nombres consécutifs. Je crois que [0-9] * ou [d] * devrait être ce que je veux encore quand j'utilise Java "s String.replaceAll, il ajoute ma chaîne de remplacement dans des endroits qui ne devraient pas" correspondre à l'expression régulière.
Par exemple: J'ai une chaîne d'entrée de "Ceci est le problème de my99String" Si ma chaîne de remplacement est "~"
Quand je lance ça
myString.replaceAll("[\d]*", "~" )
ou
myString.replaceAll("[0-9]*", "~" )
ma chaîne de retour est "~ T ~ h ~ i ~ s ~ ~ i ~ s ~ ~ m ~ y ~~ S ~ t ~ r ~ i ~ n ~ g ~ ~ p ~ r ~ o ~ b ~ l ~ e ~ m ~ "
Comme vous pouvez le voir, les chiffres ont été remplacés, mais pourquoi ajoute-t-il également ma chaîne de remplacement entre les caractères.
Je veux que ça ressemble à "C'est mon problème de chaîne"
Qu'est-ce que je fais mal et pourquoi la correspondance java est-elle comme ça?
Réponses:
9 pour la réponse № 1\d*
correspond à 0 ou plusieurs chiffres et correspond donc même à une chaîne vide. Et vous avez une chaîne vide avant chaque caractère de votre chaîne. Donc, pour chacun d'eux, il le remplace par ~
, d'où le résultat.
Essayez d'utiliser \d+
au lieu. Et vous n'avez pas besoin d'inclure \d
dans la classe de caractère.
1 pour la réponse № 2
[\d]*
allumettes zéro ou plus (tel que défini par *
). Par conséquent, vous obtenez des correspondances tout au long de vos chaînes. Si vous utilisez
[\d]+
qui "correspondra à 1 ou plusieurs numéros.
De Le document:
Greedy quantifiers
X? X, once or not at all
X* X, zero or more times
X+ X, one or more times