Как заменить все числа буквальными \ d в scala? - PullRequest
3 голосов
/ 28 февраля 2011

Я хочу написать функцию, чтобы заменить все числа в строке на литерал \d. Мой код:

val r = """\d""".r
val s = r.replaceAllIn("123abc", """\d""")
println(s)

Я ожидаю, что результат будет \d\d\dabc, но получите:

dddabc

Затем я изменяю свой код (строка 2) на:

val s = r.replaceAllIn("123abc", """\\d""")

Результат верный: \d\d\dabc

Но я не понимаю, почему метод replaceAllIn преобразует строку, а не использует ее напрямую?


В моем предыдущем коде был toList, теперь то, что я хочу. Я только что обновил вопрос. Спасибо всем.

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Scala Regex использует java.util.regex снизу (по крайней мере, на JVM).Теперь, если вы посмотрите на replaceAll в документации Java, вы увидите следующее:

Обратите внимание, что обратная косая черта (\) и знаки доллара ($) в строке замены могут привестирезультаты должны отличаться, чем если бы они рассматривались как буквенная строка замены.Знаки доллара могут рассматриваться как ссылки на захваченные подпоследовательности, как описано выше, а обратные слэши используются для экранирования литеральных символов в строке замены.

1 голос
/ 28 февраля 2011

Просто удалите toList.

val r = """\d""".r
val list = r.replaceAllIn("123abc", """\\d""")
println(list)

String с (неявно, через WrappedString, конвертируемые в) Seq[Char].Если вы вызовете toList, у вас будет List[Char].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...