Как использовать регулярное выражение в scala?

#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.