Регулярное выражение для парсинга текста с HTML
Может кто подсказать регулярное выражение для Kotlin, чтобы из этого текста получить два блока (выделил красным на скрине)?
- Первый блок текста: от <h1>Первый заголовок:</h1> и до <h1>Второй заголовок:</h1>
- Второй блок текста: от <h1>Второй заголовок:</h1> и до конца
p.s У заголовков как могут быть теги, так и нет
<h1>Первый заголовок:</h1> <ul> <li>Первый буллит</li> <li>Второй буллит</li> <li>Третий буллит</li> <li><a href='https://www.test.com/'>Ссылка на сайт</a></li> </ul> <h1>Второй заголовок:</h1> <b>Первый подзаголовок:</b> <ul> <li>Первый буллит</li> <li>Второй буллит</li> <li>Третий буллит</li> </ul> <b>Второй подзаголовок:</b> <ul> <li>Первый буллит</li> <li>Второй буллит</li> <li>Третий буллит</li> <li><a href='https://www.test.com/'>Ссылка на сайт</a></li></ul>
Ответы (1 шт):
Автор решения: Danila Kartovitskii
→ Ссылка
Можешь попробовать следующий патерн:
val pattern = "(<h1>[^<]*</h1>)(.*?)(<h1>[^<]*</h1>)(.*?)\\z"
val regex = Regex(pattern, RegexOption.DOT_MATCHES_ALL)
val matchResult = regex.find(text)
if (matchResult != null) {
val firstBlock = (matchResult.groupValues[1] + matchResult.groupValues[2]).trim()
val secondBlock = (matchResult.groupValues[3] + matchResult.groupValues[4]).trim()
} else {
// Не найдено
}
