Regex - сопоставить несколько условий просмотра - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно найти правило регулярных выражений, которое находит новые строки между точками маркера и удаляет их. Например:

• Вот некоторый текст

, который переходит к этому, разделенному 2 новыми строками

• Это новая точка маркера, разделенная 2 новыми строками

Должен стать:

• Вот некоторый текст, который переходит на это, разделенный 2 новыми строками

• Это новая точка маркера, разделенная 2 новыми строками

Вот что я пробовал:

•(.+)\K\n+(?(?=[^•])(?=.+\n+•))

Где мое мышление:

  1. Найти предыдущую строку, которая начинается с •
  2. Соберите любого персонажа до одного или нескольких символов новой строки и выбросьте. Теперь я готов сопоставить заранее и заменить символы новой строки на основе некоторых условий.
  3. Взгляд в будущее и проверка следующего символа после символа новой строки - не пуля.
  4. Если это так, убедитесь, что послевсе символы, за которыми следуют один или несколько символов новой строки, есть еще один маркер.

Я думаю, что моя проблема не в том, чтобы правильно понять, как связать эти условия в позитивную перспективу, а в том, чтобы найти какие-то четкие ответы / примеры. которые решают эту проблему.

Как всегда, любая помощь очень ценится!

1 Ответ

0 голосов
/ 28 октября 2019

Вы можете сопоставить 2 символа новой строки, а затем утверждать, что то, что справа, не начинается с маркера, но содержит маркер после этого.

^•.*\K\r?\n\r?\n(?=(?!•).*\r?\n\r?\n•)

По частям

  • ^ Начало строки
  • •.* Совпадение с маркером и любым символом 0+ раз, кроме новой строки
  • \K\r?\n\r?\n Забудьте о совпадении и сопоставьте 2 новых строки
  • (?= Положительный взгляд, утверждаем, что справа -
    • (?!•).* Отрицательный взгляд, утверждаем, что справа не является
    • \r?\n\r?\n• Соответствие 2 переводам новой строки
  • ) Закрыть положительный прогноз

Regex demo

Если \Rподдерживается совпадение с новой строкой Юникода, вы также можете использовать

^•.*\K\R{2}(?=(?!•).*\R{2}•)
...