KTB-14 Распарсить строку, используя регулярные выражения (RegEx)¶
📝 Описание¶
Регулярные выражения (RegEx) позволяют осуществлять сложный поиск и замену в строках. Они особенно полезны для парсинга данных из текстовых строк, таких как ответы от API.
Дополнительные материалы:
🗒 Задание¶
- Прочитать и распарсить отправляемое в бот сообщение. Вывести в консоль.
- Переписать парсинг
update_idс использованием Regex.
❌ Ошибки¶
✏️ Комментарии¶
Regex лучше записать в переменную за пределами while. Мы стараемся не пересоздавать переменные лишний раз.
val updateIdRegex = "\"update_id\":(.+?),".toRegex()
while (true) {
// ...
updateId = updateIdRegex.find(updates)?.groups?.get(1)?.value
// ...
}
⌨️ Решение¶
// KTB-14 (из видео)-1
val messageTextRegex: Regex = "\"text\":\"(.+?)\"".toRegex()
// KTB-14 (из задания)
val updateIdRegex = "\"update_id\":(\\d+)".toRegex()
while (true) {
Thread.sleep(2000)
val updates = getUpdates(botToken, updateId)
println(updates)
/* KTB-14 (сократили)
val startUpdateId = updates.lastIndexOf("update_id")
val endUpdateId = updates.lastIndexOf(",\n\"message\"")
if (startUpdateId == -1 || endUpdateId == -1) continue
println(updates.substring(startUpdateId, endUpdateId))
val updateIdString = updates.substring(startUpdateId + 11, endUpdateId)
updateId = updateIdString.toInt() + 1
*/
// KTB-14 (замена парсинга updateId на RegEx)
updateId = updateIdRegex.find(updates)?.groups?.get(1)?.value?.toIntOrNull()?.plus(1) ?: continue
// KTB-14 (из видео)-2
val matchResult: MatchResult? = messageTextRegex.find(updates)
val groups = matchResult?.groups
val text = groups?.get(1)?.value
println(text)
}