У меня есть программа, которая использует 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, а цены = "".
Ты можешь использовать
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])
в конце вашего регулярного выражения.