Найти текст в самых внутренних фигурных скобках, начиная со слова с заданной подстрокой - PullRequest
0 голосов
/ 03 февраля 2019

Рассмотрим следующий текст:

{\Largefont\it Hello world!} Some text. {   \Hugefont \sl Thanks.}

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

  1. определять самые внутренние фигурные скобки в полном тексте и
  2. проверяет, начинается ли первое слово в указанном блоке текста с '\' и содержит подстроку 'font'.

Регулярное выражение

re.compile(r'\{\s*[^{}]+\}')

делаетпервая часть работы.Как мне выполнить вторую часть?В частности, я не хочу, чтобы \Largefont\it рассматривался как одно слово, а как два отдельных слова \Largefont и \it.Ожидаемый результат:

{\Largefont\it Hello world!}
{   \Hugefont \sl Thanks.}

Спасибо.

Ответы [ 2 ]

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

Попробуйте это регулярное выражение:

(?<={)\s*\\[^\\]*font[^{}]*(?=})

Нажмите для демонстрации

Объяснение:

  • (?<={) - положительный взгляд сзади, чтобы убедиться, что текущей позиции непосредственно предшествует {
  • \s*\\ - соответствует 0+ пробелов, за которыми следует \
  • [^\\]*font - соответствует 0+ вхождений любого символа, который не является \, за которым следует подстрока font
  • [^{}]* - соответствует 0+ вхождений любого символа, который не является {ни }. Этот подраздел гарантирует, что вы получаете содержимое самых внутренних фигурных скобок
  • (?=}) - положительный прогноз, чтобы убедиться, что за текущей позицией сразу следует }
0 голосов
/ 03 февраля 2019

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

(?<=\{)(?=\s*\\[^{}\\]*font)[^{}]+(?=\})

Демо

Объяснение:

  • (?<=\{) - Позитивный взгляд позади, чтобы гарантировать, что тексту предшествует { символ
  • (?=\s*\\[^{}\\]*font) - Позитивный взгляд вперед, чтобы содержимое внутри фигурных скобок начиналось с дополнительного пробела, затем \ затемпервое слово содержит font в первом слове, за которым следуют дополнительные символы, отличные от { или }
  • [^{}]+ - фактически захватывает предполагаемый текст
  • (?=\}) - положительный взгляд впередчтобы захваченный контент содержался в закрывающей фигурной скобке
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...