Заменить версию в многострочной строке - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь заменить версию имени диаграммы в файле и построил следующий урезанный пример.Но ничто не заменяется.Есть идеи о том, что я делаю не так?

val content = """releases:
  web-env:
    version: 1.7.0
    enabled: true
  web-app:
    enabled: true
    version: 1.39.0
"""

val chart = "web-env"
val version = "new version"

val regex = "($chart:.*version: )(.*)\n".toRegex(MULTILINE)
val replace = content.replaceFirst(regex, "$1$version")
println(replace)

1 Ответ

0 голосов
/ 27 февраля 2019

Ваш MULTILINE в коде выдает ошибку и не работает.Может быть, из-за какого-то пропавшего импорта, но я совсем не знаю Kotlin.Но, похоже, что MULTILINE похоже на DOTALL, чтобы включить сопоставление точек с новой строкой..* в вашем регулярном выражении является жадным, поэтому даже если я заставлю ваше регулярное выражение работать, он заменит вторую версию в вашем тексте, следовательно, вы должны использовать не жадную версию в своем регулярном выражении [\\w\\W]*?, и \\S+ соответствует одному или несколькимнепробельные символы и будут соответствовать 1.7.0, хотя вы даже можете написать его как \\d+(\\.\\d+)*, если хотите точно соответствовать версии, состоящей только из цифр.

Я удалил MULTILINE из вашего кода и исправил регулярное выражение,который, кажется, работает нормально.Проверьте этот измененный код,

fun main(args: Array<String>) {
    val content = """releases:
      web-env:
        version: 1.7.0
        enabled: true
      web-app:
        enabled: true
        version: 1.39.0
    """

    val chart = "web-env"
    val version = "new version"

    val regex = "($chart:[\\w\\W]*?version: )(\\S+)".toRegex()
    val replace = content.replaceFirst(regex, "$1$version")
    println(replace)
}

Примечание: [\\w\\W] - это еще один способ включить сопоставление любого символа, включая символ новой строки.

Это выводит следующий вывод, который, как я предполагаю, вы ожидаете,

releases:
      web-env:
        version: new version
        enabled: true
      web-app:
        enabled: true
        version: 1.39.0

Демонстрация кода Kotlin

Надеюсь, что это хорошо работает, и дайте мне знать по любым вопросам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...