Regex для поиска каждой второй новой строки (соответствует только символам новой строки) - PullRequest
0 голосов
/ 17 апреля 2020

Regex для поиска каждой второй новой строки (соответствует только символам новой строки)

Ввод:

LINE1
LINE2
LINE3
LINE4
LINE5
LINE6

Выход:

LINE1LINE2
LINE3LINE4
LINE5LINE6

Я пробовал \n[^\n]*\n но он также соответствует тексту для замены и не дает желаемого результата.

У меня проблемы с сопоставлением только каждого второго символа новой строки.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Для четного числа строк вы можете использовать положительный прогноз, чтобы утверждать, что на правой стороне 0 или более раз повторение 2 строк, заканчивающихся новой строкой, с последующим сопоставлением последней строки и конца строки.

При замене используйте пустую строку.

\n(?=(?:.+\n.+\n)*.+$)

Объяснение

  • \n Соответствует новой строке
  • (?= Позитивный взгляд, утверждаем, что справа
    • (?:.+\n.+\n)* Соответствие 0+ раз 2 строки, за которыми следует новая строка
    • .+$ Соответствует любому символу, кроме перевод строки 1+ раз и подтверждение конца строки
  • ) Закрыть взгляд

Regex demo

Выход

LINE1LINE2
LINE3LINE4
LINE5LINE6
0 голосов
/ 17 апреля 2020

Вы можете использовать регулярное выражение

^(.*)\n(.*\n)

и заменять каждое совпадение на $1+$2.

Демо

В качестве альтернативы, вы можете просто сопоставьте каждую пару строк и удалите первый символ новой строки. Это требует немного кода, конечно. Поскольку вы не указали, какой язык вы используете, я проиллюстрирую это с помощью некоторого кода Ruby, который читатели легко найдут для перевода на любой язык высокого уровня. Предположим, что str является переменной, содержащей вашу многострочную строку. Тогда:

r = /^(?:.*\n){2}/
s = str.gsub(r) { |s| s.sub(/\n/, '') }
puts s
LINE1LINE2
LINE3LINE4
LINE5LINE6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...