Использование RegEx для поиска сред LaTeX

338
ένας

У меня есть LaTeXкод, который выглядит так:

--- text might be here --- $\begin k & l & m \\ x & y & z \end$ --- text might be here --- $\begin k & l & m \\ x & y & z \end$ --- text might be here --- $\begin k & l & m \\ x & y & z \end$ --- text might be here --- 

Я создал это, regexчтобы захватить каждую из casesсред:

\\begin\((\s*.*\s*)*)\\end\ 

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

Обратите внимание, что пробелы, переносы строк и табуляции не являются необходимыми и могут не всегда присутствовать.

0
Я не знаю, какой вариант регулярного выражения используется в латексе, поэтому может не дать вам правильный синтаксис, однако вам может понадобиться подходить здесь: использовать ленивые квантификаторы (`. *?` Вместо `. *`) Или исключать символы, если вы можете найти их только при закрытии (`[^ {] *` или `[^ \]` вместо `. *`) Máté Juhász 6 лет назад 0
@ MátéJuhász: я пробовал ленивый квантификатор таким образом `((\ s *. * \ S *) *?)`, И он работал правильно. Спасибо .. :) Я не могу использовать исключение этих символов: `\, {,}`, так как они могут быть использованы в среде. ένας 6 лет назад 0

1 ответ на вопрос

0
Máté Juhász

Обычно вы можете использовать разные подходы:

  1. использовать ленивые квантификаторы
    • .*? вместо .*
  2. исключить символы, если вы можете найти их, появляющихся только при закрытии
    • [^{]*или [^\]вместо.*