Regex FindAll не печатает результаты Kotlin

У меня есть программа, которая использует ML Kit для распознавания текста в документе, и я беру эти данные и печатаю только цены. Поэтому я беру строку распознавания текста и передаю ее через регулярное выражение ниже:

val reg = Regex("\$([0-9]*.[0-9]{2})")
    val matches = reg.findAll(rec)
    val prices = matches.map{it.groupValues[0]}.joinToString()
recogResult.text = prices 

Я протестировал формулу Regex на другом веб-сайте, и она собирает все нужные данные. Однако ничего не печатает. Когда дело доходит до части reg.findAll(rec), она соответствует = kotlin.sequences.GeneratorSequence@bd56ff3, а цены = "".

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ты можешь использовать

val reg = Regex("""\$[0-9]*\.[0-9]{2}""")
val matches = reg.findAll("Price: \$1234.56 and \$1.56")
val prices = matches.map{it.groupValues[0]}.joinToString()

См. онлайн демо. Примечания:

  • """...""" — это строковый литерал в тройных кавычках, в котором обратная косая черта анализируется как литерал \ символов и не используется для формирования управляющих последовательностей строк.
  • \$ - в строковом литерале с тройными кавычками определяет \$ экранирование регулярного выражения, которое соответствует литералу $ char
  • [0-9]*\.[0-9]{2} соответствует нулю или более цифрам, . и двум цифрам.

Обратите внимание, что вы можете использовать \p{Sc} для соответствия любым символам валюты, а не только $.

Если вы хотите убедиться, что за двумя дробными цифрами не следует никакая другая цифра, добавьте (?![0-9]) в конце вашего регулярного выражения.

Другие вопросы по теме