LaTeX. Регулярные выражения. Поиск и замена.

  • Автор темы Автор темы german
  • Дата начала Дата начала

german

Топикстартер
20 лет на форуме
Сообщения
4 566
Реакции
649
Всем привет!
Вопрос. Использую регулярные выражения, чтобы найти и заменить или вставить что-то мне нужное. В частности, необходимо найти все числа со знаком процента и поставить перед этим знаком обратный слэш. Вот так: есть 1%, надо 1\%.
Задаю поиск: (\d+)(%). Находит. Хочу поставить слэш. И тут начинается самое главное - он его ставит, но группы тоже меняет. Например задаю $1\\$2, он подставляет 1\\$2. Задаю \1\\\2, он подставляет \1\\\2.

Кто знает, как правильно в нём задавать условие замены в случае работы с группами?
 
Какое отношение это имеет к LaTeX?
Служебные символы в RegExp нужно эскейпить, вместо \ писать \\, вместо $ писать \$
Вообще при работе с LaTeX советую пользоваться специализированными редакторами.
Мне очень нравился WinEDT, но он был шибко платным.
Мне аж жена автора написала, что её муж бедный стьюдент и доходы от WinEDT, это единственное, что позволяет ему сводить концы с концами. Но, после того, как я им написал, сколько в России получает богатый профессор, они как то стухли :)

И остался шибко платным... $100 хотят.
 
Последнее редактирование:
У меня Texmaker стоит. В силу обстоятельств я не могу смотреть в сторону платных.
Служебные символы в RegExp нужно эскейпить, вместо \ писать \\, вместо $ писать \$
Да пофиг. Он в поле «заменить» напрочь отказывается воспринимать служебные символы, как служебные. Для него они все печатные.
Но, после того, как я им написал, сколько в России получает богатый профессор, они как то стухли :)
'))'
 
А если попробовать с небольшими костылями в два прохода?

Первый
Найти:
(\d+)(%)
Заменить:
$1\($2)

Второй
Найти:
\(%\)
Заменить:
%
 
Или если в тексте нет обратных слешей.

Первый
Найти:
(\d+)(%)
Заменить:
$1/$2

Второй
Найти:
/
Заменить:
\

Вообще через любой неиспользуемый в тексте символ это можно провернуть.
Экранирование в поле Change работает как-то не очень хорошо.
 
А если попробовать с небольшими костылями в два прохода?

Первый
Заменить:
$1\($2)
Вот он ровно это и подставляет.
Второй
Найти:
\(%\)
Заменить:
%
Нужно искать именно число с процентом. Сам процент в LaTeX является служебным, используется для комментариев. Всё, что после него - не печатается.
 
@german
Поясни, в каком конкретно RegExp тебе нужно решение?
Или какие варианты есть?

Linxy
Оно, зараза, у всех свои реализации... :) +- близкие, но именно +-...
 
@german
Поясни, в каком конкретно RegExp тебе нужно решение?
Или какие варианты есть?
У меня есть Texmaker. Вот в нём надо использовать регулярные выражения. У него в хэлпе написано для самых продвинутых:
4.13 Replacing text with a regular expression
The parameter $1 must be used for the captured text and the "Regular Expression" option must be checked (click on the "+" button)
For example (to replace all the \textit{foo} by \textbf{foo}) :
  • "Find" field : \\textit\{([^}]*)\}
  • "Replace" field : \textbf{$1}
И что с этим делать?
Linxy
Оно, зараза, у всех свои реализации... :) +- близкие, но именно +-...
Вотвот. Только я проверил на Regex101 - online regex editor and debugger целых 4 варианта и все они работают. А вот здесь - нет!
 
Я чуть-чуть на ощупь иду, потому что LaTex`a нет и могу проверять только в InDesign и предполагать.
В Индизайне поведения для запросов из стартового поста такое же, поэтому была надежда, что решение, которое устроит Индизайн, устроит и Латекс.
Вот он ровно это и подставляет.
Т. е. и первую группу $1 заменяет не найденное, а на $1?

Попробуй через другой символ, просто в два хода.
Нужно искать именно число с процентом. Сам процент в LaTeX является служебным, используется для комментариев. Всё, что после него - не печатается.
Так мы и ищём в первом проходе именно число с процентом, но мысль в том, чтобы добавить скобки, которые уберут влияние слеша, на вторую группу. А вторым проходом уже ищем только знак процента в скобках и эти скобки убираем.
Для комментариев же используется обычный процент, без скобок?
 
@german
Так, на всякий случай...

И я бы решал такие вещи в FAR...
За форум спасибо. Но зачем тогда в Texmaker включают возможность работы с регулярными выражениями, если они не работают? Или почему бы не сделать список рабочих команд? Ведь в хэлпе они четко показывают, как работает замена в их примере.
 
Я чуть-чуть на ощупь иду, потому что LaTex`a нет и могу проверять только в InDesign и предполагать.
В Индизайне поведения для запросов из стартового поста такое же, поэтому была надежда, что решение, которое устроит Индизайн, устроит и Латекс.
Я сам так думал ) Но увы. Поиск работает. Замена - нет.
 
Хорошо. А если втулить вместо слеша другой символ, запрос отработает?
 
Последнее редактирование:
Он любой символ воспринимает как печатный. В поле «заменить».
 
Тогда давай попробуем избавится от групп.
Что твой Латекс скажет на это?
Найти:
\d+\K%
Заменить:
\%
 
\K
(со слешем)
Всё, что находится до него будет использоваться для поиска совпадения, но не будет учитываться в найденном. Грубо говоря, это другая версия просмотра вперёд.

Не факт, что Латекс с ним знаком. Надо пробовать.
 
Т. е. этим запросом мы ищем знак процента, у которого впереди одна или больше цифр, но работать потом будем только со знаком процента, только с тем, что идёт после \K.
 
Здесь это не работает. Но есть это - [^] (исключить). Попробую
 
Нет, в этом случае он исключает из поиска.