#regex #scala
#регулярное выражение #scala
Вопрос:
Я изучаю Scala и spark и хочу получить числа из строки. И для этого я использую регулярное выражение. И узнал о странной особенности использования регулярных шаблонов в Scala.
Вот мой код:
val myString: String = "there would be some number here 34."
val pattern = """.* ([d] ).*""".r
val pattern(numberString) = myString
val num = numberString.toInt
println(answer)
Код работает нормально, но кажется немного странным и менее читаемым.
Есть ли какой-либо другой способ сделать это в Scala? Или любой другой синтаксис, который я могу использовать?
Комментарии:
1. Что ж, я прохожу похожий урок, и я не могу разобраться в этом синтаксисе. Довольно странно видеть, что часть результата является частью вызова функции?
val pattern(numberString) = myString
. Кто-нибудь может это объяснить?
Ответ №1:
Способ извлечения числа с помощью сопоставления с образцом довольно ресурсоемкий: поскольку шаблон должен соответствовать всей строке целиком, вам приходится добавлять .*
на обоих концах регулярного выражения, и это вызывает много возвратов. Вы также добавили пробел, чтобы убедиться, что первое .*
не поглощает все цифры слева и возвращает все найденные цифры 1 .
Если вы ищете первое совпадение, используйте findFirstIn
:
val myString: String = "there would be some number here 34."
val numberString = """d """.r.findFirstIn(myString)
val num = numberString.get.toInt
println(num) // => 34
Смотрите демонстрационную версию Scala.