Регулярное выражение для сопоставления каждой строки, заключенной в фигурные скобки - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь сопоставить каждую строку в фигурных скобках, и я пытаюсь поймать то, что я хочу. Например, если у меня есть этот текст:

{
  this is a line,
    this = another line,
    this is the third line!
this is, indeed, another line
},
round two: {
we're now on the second pair of brackets,
  and this is the final line.
}

Затем я хочу сопоставить и захватить всего шесть строк:

  • this is a line,
  • this = another line,
  • this is the third line!
  • this is, indeed, another line
  • we're now on the second pair of brackets,
  • and this is the final line.

Итак В настоящее время моя текущая идея пытается найти соответствие "фигурная скобка" -> "что-нибудь" -> "линия" -> "что-нибудь" -> "фигурная скобка", то есть что-то вроде этого:

{(?s)[^}]*(^([^}^\n]+)$)(?s)[^}]*}

Но это соответствует только одной строке на пару фигурных скобок, а не каждой строке.

Как мне go поступить так? Спасибо.


РЕДАКТИРОВАТЬ: обновлен пример, чтобы включить предыдущий текст перед одной из открывающих фигурных скобок и различных пробелов.

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Просто сопоставьте строки, которые не содержат фигурную скобку:

^[^{}\r\n]+$

Необходимо установить многострочный флаг (/m). В качестве альтернативы, вставьте (?m) в начале регулярного выражения.

Demo

Регулярное выражение гласит: «соответствует началу строки, за которым следует один или несколько символов, других чем {, }, \r и \n, за которым следует конец строки ".

Чтобы исключить начальные пробелы в каждой совпадающей строке, вы можете слегка изменить регулярное выражение:

^\s*\K[^{}\r\n]+$

Демо

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

0 голосов
/ 27 марта 2020

Предполагается, что входные данные правильно сформированы:

([^{\n](?=[^{]+}))+

См. живая демонстрация

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