# Использование регулярных выражений для разбора данных в любом формате Данные от АПИ могут приходить в разных форматах, и не всегда удобно парсить тот же XML штатными средствами. Но так как от АПИ мы получаем строку, то можно сделать разбор этой строки с помощью регулярных выражений (Потренироваться в написании "регулярок" можно [тут](https://regex101.com/)). Например, ответ от банка с курсом валют: ```xml 036 AUD 1 Австралийский доллар 52,6319 944 AZN 1 Азербайджанский манат 43,6374 826 GBP 1 Фунт стерлингов Соединенного королевства 98,4578 051 AMD 100 Армянских драмов 15,0921 ``` Нам из всего этого, допустим, нужны **CharCode**, **Nominal**, **Value** (на самом деле нам нужен и **Name**, но я специально его пропустил) Пишем регулярное выражение ```regexp (.*?).*?(.*?).*?(.*?) ``` * **()** - группа, т.е. значение того что внутри скобок мы сможем получить после поиска * **.*?** - означает всё что угодно в не "жадном" режиме В коде создаем экземпляр регулярного выражения и вытаскиваем из исходной строки все совпадения: ```kt val re = """(.*?).*?(.*?).*?(.*?)""". toRegex(RegexOption.DOT_MATCHES_ALL) val seq = re.findAll(result) seq.forEach { Log.d("KEILOG", it.groupValues[1]+" "+it.groupValues[2]+" "+it.groupValues[3]) } ``` * в параметрах "регулярки" обязательно добавляем опцию `RegexOption.DOT_MATCHES_ALL`, иначе переносы строки не воспринимаются как "любой" символ и поиск закончится на первой строке * **result** тут та строка, котрую вы получили в ответ на HTTP-запрос * **findAll** позвращает sequence (последовательность) результатов поиска * последовательность можно перебрать в цикле **forEach** и достать в нём значения (*groupValues*), которые нам нужны Естественно в реальном приложении нужно не выводить в лог, а вставить в массив валют. То же самое можно сделать и с JSON. Например, распарсим данные о погоде: ```json {"cod":"200","message":0,"cnt":40,"list":[{"dt":1638964800,"main":{"temp":-0.63,"feels_like":-5.67,"temp_min":-0.63,"temp_max":1.28,"pressure":1021,"sea_level":1021,"grnd_level":1009,"humidity":98,"temp_kf":-1.91},"weather":[{"id":500,"main":"Rain","description":"небольшой дождь","icon":"10d"}],"clouds":{"all":100},"wind":{"speed":4.95,"deg":193,"gust":12.54},"visibility":10000,"pop":1,"rain":{"3h":0.87},"sys":{"pod":"d"},"dt_txt":"2021-12-08 12:00:00"} ``` Мне лень писать всю строку, но уже должно быть понятно ```regexp \{\"dt\":(.*?),\"main\":\{\"temp\":(.*?), ```