Регулярное выражение для слова * not * в определенной латексной команде - PullRequest
2 голосов
/ 29 апреля 2019

Я ищу регулярное выражение, которое будет соответствовать всем вхождениям foo, если оно не входит в команду \ref{..}.Так что \ref{sec:foo} не должно совпадать.

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

Есть некоторые похожиевопросы, пытающиеся определить, когда что-то находится в скобках и т. д.

Первый вариант имеет интересное решение с использованием альтернатив: \(.*?\)|(,) первый вариант соответствует нежелательным версиям, а второй имеет группу соответствия.Однако, поскольку я использую это в контексте поиска и замены, я не могу использовать группы совпадений.

1 Ответ

3 голосов
/ 29 апреля 2019

Чтобы найти регулярное выражение для того, что вы хотите, потребуется поиск переменной длины, который доступен только для очень ограниченных языков (таких как C # и PyPi в Python), поэтому вам придется согласиться с менее чем идеальным.Вы можете использовать это регулярное выражение для соответствия foo, которое не находится в фигурных скобках, если у вас нет фигурных вложенных фигурных скобок,

\bfoo\b(?![^{}]*})

Это не будет соответствовать foo внутри \ref{sec:foo}или даже в somethingelse{sec:foo}, как вы можете видеть, он не соответствует foo, который не содержится в фигурных скобках.Если вам нужно точное решение, тогда потребуется поддержка переменной длины, которая, как я уже говорил, доступна на очень ограниченных языках.

Regex Demo

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