Je suis relativement nouveau dans Regex et bien que je sache que Scala a une méthode pour utiliser Remplacer les éléments avant la première occurrence, mais je me demandais s'il y avait un moyen de se débarrasser des éléments d'une chaîne après sa première occurrence dans Scala.
Par exemple, si je devais avoir une chaîne comme
"Hello. World"
Comment pourrais-je supprimer tous les W. suivants.
Pour que cela ressemble à quelque chose qui ressemble à
"Hello. W.o.r.l.d"
Merci.
3 Réponses :
Aucune expression régulière sophistiquée requise. Il suffit de split () , puis de vous reconnecter.
val noDots = "Hello. W.o.r.l.d".split("\\.")
val res = noDots.head + "." + noDots.tail.mkString //res: String = Hello. World
Cela fonctionnera correctement s'il n'y a qu'un seul . dans le texte mais s'il y en a pas de . puis il en insère un à la fin de la chaîne.
Voici une approche utilisant un mélange de correspondance de modèles Regex et de replace:
val s = "Hello. W.o.r.l.d"
val pattern = """(.*?\.)(.*)""".r
s match {
case pattern(a, b) => a + b.replace(".", "")
case others => others
}
// res1: String = Hello. World
Notez que si la chaîne n'a pas de . , il sera mis en correspondance avec cas d'autres .
Vous pouvez également essayer avec la combinaison indexOf et sous-chaîne
scala> val x = "Hello. W.o.r.l.d"
x: String = Hello. W.o.r.l.d
scala> x.substring(0,x.indexOf(".")+1) + x.split("\\.").tail.mkString
res21: String = Hello. World
scala>