Попробуйте что-то вроде этого:
Шаблон: (?<!\\)([$]+)([^$]*?)\\([^$]*?)(?<!\\)\1
Замена: \1\2\\\\\\\\\3\1
Примеры с использованием предоставленных вами тестов: https://regex101.com/r/X9lGCF/2
Грубое объяснение шаблона:
(?<!\\)([$]+)
- сопоставить и захватить хотя бы одного неграмотного $
;(?<!\\)
является отрицательным взглядом сзади, чтобы убедиться, что $
не имеет префикса с обратной косой чертой
([^$]*?)\\([^$]*?)
- захват текста между первой совпавшей последовательностью $
и такой же изначально совпавшейПоследовательность $
по обе стороны от \\
(?<!\\)\1
- Повторно использовать первоначально согласованную последовательность $
в нашем шаблоне (это приводит к тому, что окружающие последовательности $
имеют одинаковую длину; например, несопоставляя такие вещи, как $\\$$
), гарантируя, что последняя последовательность также не экранирована
Подстановка заменит обратные слэши (они экранированы, поэтому мы используем 8 из них для получения 4 обратных слэшей) с захваченными окружающимитекст и $
последовательности.