Regex - Извлекает заголовки указанного уровня из уценки (kotlin) - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь извлечь заголовки из файла уценки с помощью регулярных выражений, в настоящее время у меня есть вложенный l oop, который просматривает каждую строку уценки и затем просматривает каждый уровень заголовка. Однако мой код завершается ошибкой, когда в блоке кода обнаружена строка, подобная заголовку.

Если заданный уровень равен 1, он получит H1s Если указанный уровень равен 2, он получит H1s и H2s Если указанный уровень это 3, он будет получать H1s, H2s и H3s

var content = inputData
val thePages = mutableListOf<String>()
var search = "#".repeat(level) + " "
for (line in content.lines()) {
    for (i in 0..search.length-1) {
        if (line.startsWith(search.substring(i))) {
            thePages.add(line)
        }
    }
}

Я пытался сделать это с регулярным выражением без удачи, пример строки уценки здесь: https://pastebin.com/c28bt8F3

1 Ответ

1 голос
/ 07 января 2020

А как же:

fun main() {
    val content = listOf("# Header 11", "## Header 12", "### Header 13", "#### Header 14") // sample data
    println(SearchExample().search(1, content)) // print level 1 only
    println(SearchExample().search(2, content)) // print up to level 2
    println(SearchExample().search(3, content)) // print up to level 3
}

class SearchExample {

    private val regex = "^([#]+).*".toRegex()

    fun search(level: Int, content: List<String>): List<String> {
        return content.map { it to determineHeader(it) } // get a pair of the value and the header level
                .filter { it.second in 0..level } // filter out all header levels below level and no matching stuff
                .map { it.first } // get the content
    }

    private fun determineHeader(line: String): Int {
        val result = regex.matchEntire(line) ?: return -1 // check for matching otherwise return -1
        return result.groupValues[1].length // the the group (of # values) and count the length of the group value which is the amount of # chars
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...