Найти поля, пропускающие одну из двух закрывающих скобок в VS Code - PullRequest
1 голос
/ 04 мая 2020

Используя регулярные выражения в коде Visual Studio, я пытаюсь найти поля в файле .bib (библиография c ссылки), в которых отсутствует одна из двух закрывающих фигурных скобок, за которыми следует поле Pagination. В файле .bib каждое поле заканчивается запятой и новой строкой. В приведенном ниже примере первое поле (Abstract) соответствует этим критериям.

@jurisdiction{InternationalFruit:1972fo,
Abstract = {{Text with all kinds of punctuation.?},
Pagination = {paragraph},
Ecli = {EU:C:1972:115},
Keywords = {eu},
Number = {5},
Title = {{International Fruit Company NV}},
Year = {1972}}

Поэтому я попытался использовать отрицательный вид сзади, например:

\{\{[\s\S]*?(?<!\})\},\n\tPagination 

Но это жадно : он будет включать в себя несколько полей в совпадении, пока не встретит поле, которое заканчивается одним \} и за которым следует поле Pagination.

Я думал, что первый ? этого избежит. Может ли кто-нибудь сказать мне

  • , как это сделать правильно, и
  • , почему ? не делает то, что, как я думал, будет здесь?

Ответы [ 2 ]

2 голосов
/ 04 мая 2020

Вы можете найти соответствие от {{ до первого вхождения }, которому не предшествует }, за которым следует сопоставление запятой и новой строки и утверждение Pagination на следующей строке.

\{\{.*?\}(?<!\}\}),\r?\n(?=Pagination\b)

Шаблон будет соответствовать

  • \{\{ Соответствовать {{
  • .*? Соответствует любому символу, кроме новой строки, как минимум как возможный
  • \} Соответствие }
  • (?<!\}\}) Утверждение того, что слева не }}
  • ,\r?\n Совпадение запятой и новой строки
  • (?=Pagination\b) Утверждение того, что справа: Pagination

Regex demo

Обновленный шаблон с \t

\{\{.*?\}(?<!\}\}),\t\r?\n(?=Pagination\b)
1 голос
/ 04 мая 2020

Кажется, что работает следующий шаблон:

\{\{[^}]+\}[^}]

Это соответствует двум открывающимся {{, за которыми следует некоторое содержимое ( не , включая закрывающее }), заканчивающийся }, который не закрыт должным образом.

Демо

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