Как заменить 2 обратной косой черты между символами $ на 4 обратной косой черты, используя Python и Regex? - PullRequest
0 голосов
/ 02 октября 2018

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

Например, я хочу преобразовать some \\ random text $ 5\\ 6$ в some \\ random text $ 5\\\\ 6$ иsome $5x^2 \$ random text $$ 5 \\ 6$$ до some $5x^2 \$ random text $$ 5 \\\\ 6$$.

Как я могу сделать это с помощью регулярных выражений и Python?

1 Ответ

0 голосов
/ 02 октября 2018

Попробуйте что-то вроде этого:

Шаблон: (?<!\\)([$]+)([^$]*?)\\([^$]*?)(?<!\\)\1 Замена: \1\2\\\\\\\\\3\1

Примеры с использованием предоставленных вами тестов: https://regex101.com/r/X9lGCF/2

Грубое объяснение шаблона:

(?<!\\)([$]+) - сопоставить и захватить хотя бы одного неграмотного $;(?<!\\) является отрицательным взглядом сзади, чтобы убедиться, что $ не имеет префикса с обратной косой чертой

([^$]*?)\\([^$]*?) - захват текста между первой совпавшей последовательностью $ и такой же изначально совпавшейПоследовательность $ по обе стороны от \\

(?<!\\)\1 - Повторно использовать первоначально согласованную последовательность $ в нашем шаблоне (это приводит к тому, что окружающие последовательности $ имеют одинаковую длину; например, несопоставляя такие вещи, как $\\$$), гарантируя, что последняя последовательность также не экранирована

Подстановка заменит обратные слэши (они экранированы, поэтому мы используем 8 из них для получения 4 обратных слэшей) с захваченными окружающимитекст и $ последовательности.

...