2011-08-05 50 views
1

在Latex中,我有很多數學表達式,訂閱方式爲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的正則表達式,但似乎不足以解決這個問題。

謝謝你的任何事情!

回答

0

我不熟悉的乳膠100%,但典型的正則表達式應該是這樣的:

(?<\^)# 

#爲1,2或3。然後,在您更換,你會更換比賽與\alpha,\beta\gamma(?<\^)是一個負面的後視,它表示僅在沒有^字符(您的電源指示符)之前替換該號碼的實例。

如果典型的正則表達式不允許,我會刪除我的答案。

+1

一個可能的問題:如果指數大於一個數字(例如這將不起作用'$ E^12_ {} 345 $')。 –

0

我不知道你正在使用這個什麼編輯器或正則表達式引擎,但這裏的基本想法我一起去在Perl上下的正則表達式:

替換此:

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

有了這個:

\\alpha 

我想你會想設置g標誌爲好。

不知道我是否有正確的轉義語法(自從我接觸Perl以來已經有一段時間了),但我認爲是這樣。根據需要爲\測試,\伽馬等

+0

不會對'$ E_ {11} $' – Qtax

+0

@Qtax工作 - 反思有點和編輯。現在應該工作。標 –

+0

語法錯誤的位置:'(<\ <--- HERE',你也正在試圖用一個可變長度的回顧後,不會在Perlish的正則表達式以及工作 – Qtax

0

重複嘗試這些:

  • 取代(?<!\^\d|\d{2}|\d{3}|\d{4})1\alpha
  • \beta
  • 取代(?<!\^\d|\d{2}|\d{3}|\d{4})2\gamma
更換 (?<!\^\d|\d{2}|\d{3}|\d{4})3

編輯:這些正則表達式確保它不會替換指數中的數字。如果您有負指數,您可能需要調整它們來檢查可選的-

編輯2:@QTax指出,你不能使用可變長度lookbehinds。的向後看

Subexp必須固定字符長度。 但不同的字符長度是允許在頂級只 替代品。

參考:http://tacosw.com/latexian/help/find/regex.html

+0

變長lookbehind? – Qtax

+0

@Qtax,謝謝指出。我是LaTeX的新手。 –

0

在Perl中,你可以做這樣的事情:

$text =~ [email protected]\$\w[^${\s]*_{\K([123]+)(?=}\$)@ 
    local $_ = $1; 
    s/1/\\alpha/g; s/2/\\beta/g; s/3/\\gamma/g; 
    $_ 
@ge;