регулярное выражение и подстановка - PullRequest
1 голос
/ 05 августа 2011

В латексе у меня было много математических выражений с подписками в терминах 123, теперь мне нужно изменить их на \alpha \beta \gamma вместо 123.например:

$E_{223}$ до $E_{\beta\beta\gamma}$

и

$E_{31}$ до $_{\gamma\alpha}$

Однако у меня также есть индекс мощности, которыйне предполагается изменять, например, $E^3_{112}$ следует изменить на $E^3_{\alpha\alpha\beta}$.

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

спасибо за что угодно!

Ответы [ 4 ]

0 голосов
/ 06 августа 2011

В Perl вы можете делать такие вещи, как:

$text =~ s@\$\w[^${\s]*_{\K([123]+)(?=}\$)@
    local $_ = $1;
    s/1/\\alpha/g; s/2/\\beta/g; s/3/\\gamma/g;
    $_
@ge;
0 голосов
/ 06 августа 2011

Я не знаю, какой редактор или движок регулярных выражений вы используете для этого, но вот основная идея, которую я бы использовал в Perl-ish regex:

Замените это:

(?<=\{\d*)1(?=\d*\})

С этим:

\\alpha

Я думаю, вы также захотите установить флаг g.

Не уверен, что у меня правильный синтаксис экранирования (это былонекоторое время, так как я коснулся Perl), но я так думаю.

Повторите по мере необходимости для \ beta, \ gamma и т. д.

0 голосов
/ 06 августа 2011

Попробуйте это:

  • заменить (?<!\^\d|\d{2}|\d{3}|\d{4})1 на \alpha
  • заменить (?<!\^\d|\d{2}|\d{3}|\d{4})2 на \beta
  • заменить (?<!\^\d|\d{2}|\d{3}|\d{4})3 на \gamma

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

Редактировать 2: @QTax указал, что вы не можете использовать вид сзади переменной длины.

Subexp оглядки должен быть фиксированной длины символа. Но разная длина символов допускается на верхнем уровне только альтернативы.

Ссылка: http://tacosw.com/latexian/help/find/regex.html

0 голосов
/ 06 августа 2011

Я не на 100% знаком с латексом, но типичное регулярное выражение выглядело бы так:

(?<\^)#

Где # равно 1, 2 или 3. Тогда, вместо вас, вы бызамените спички на \alpha, \beta и \gamma.(?<\^) является отрицательным условным обозначением, которое говорит о замене экземпляров этого числа только тогда, когда им не предшествует символ ^ (ваш индикатор питания).

Если типичное регулярное выражение не разрешаетЯ удалю свой ответ.

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