2016-10-12 4 views
0

Gibt es eine Möglichkeit, eine Zeichenfolge in einem Text mit den ursprünglichen übereinstimmenden Werten zu ersetzen?
Zum Beispiel würde ich gerne die ganzen Zahlen alle durch Dezimalzahlen ersetzen, wie im folgenden Beispiel:Scala: Wie ersetzt man Zeichenfolgen mit den ursprünglichen übereinstimmenden Werten?

"hello 45 hello 4 bye" --> "hello 45.0 hello 4.0 bye" 

ich mit findAllIn alle Zahlen passen könnte und sie nach ersetzen, aber ich möchte es wissen, ob ist eine bessere Lösung.

Antwort

2

Mit Regular können Sie $1 verwenden Sie das Ergebnis der ersten Erfassungsgruppe zu erhalten (in Klammern):

val regex = "(\\d+)".r 
val text = "hello 45 hello 4 bye" 
val result = regex.replaceAllIn(text, "$1.0") 
// result: String = hello 45.0 hello 4.0 bye 
+1

Warum '$ 1' verwenden, wenn Sie sich auf die gesamte Übereinstimmung mit' $ 0' beziehen können? –

+0

@ WiktorStribiżew yup, das ist noch einfacher:/ –

+0

Und wissen Sie, wie kann ich einige Operationen auf "$ 0" tun? Zum Beispiel: 'replaceAllIn (text," $ 0 ".take (" $ 0 ".length - 1) +" .0 ")' funktioniert nicht wegen 'Illegal group reference', ist es eine Möglichkeit das zu tun? – Simon

Verwandte Themen