2010-01-27 172 views
3

簡單的regex在我的LaTeX文件,我有數以千計下面的結構的出現:極品乳膠

$\displaystyle{...math goes here...}$ 

我想和

\mymath{...math goes here...} 

注取代這些的$消失了,但大括號仍然存在---如果不是最後的$,這將是一個基本的查找和替換。如果只有我知道任何正則表達式,我相信它會處理這個沒有問題。我需要做什麼正則表達式?

非常感謝提前。

編輯:一些問題和疑問出現了,所以讓我澄清:

  1. 是,$\displaystyle{ ... }$可以在同一行中多次出現。
  2. 否,嵌套}$的(如$\displaystyle{...{more math}$...}$)不能出現。我的意思是,如果你把它放在\mbox之類的東西里,我想它可能會出現,但我無法想象爲什麼有人會在$\displaystlye{}$這個結構裏面做到這一點,其目的是用文本內聯數學運算。無論如何,這不是我曾經做過或可能做的事情。
  3. 我嘗試使用Perl的建議,但雖然殼沒有提出異議,文件保持不受影響。我試過使用sed建議,但是shell反對'(''。'我以前從來沒有用過sed(和「man sed」是鈍的),但這裏是我所做的:導航到含.tex文件裏和一個目錄下鍵入「sed s/\$\\displaystyle({[^}]+})\$/\\mymath\1/g *.tex」沒有運氣如何使用SED做我想做什麼

同樣,許多許多感謝所有提供幫助

+0

我認爲你可以明確一個限制,讓每個人的工作變得更簡單:數學部分內部不會有$,因爲這將表明LaTeX中數學模式的結束(更準確地說沒有未轉義的$,即\ $是允許的,但我懷疑你會有太多的數學公式與美元符號)。 – Aniko 2010-01-27 15:41:59

+0

你是對的。數學模式沒有$(對我來說,無論如何)。 – 2010-01-27 16:00:33

+0

不是直接編輯文件,而只是爲了看看結果是什麼,你可以使用perl -pe而不是perl -pi -e。確保沒有錯字。 – bertolami 2010-01-28 08:09:52

回答

4

sed的:。?。

s/\$\\displaystyle({[^}]+})\$/\\mymath\1/g 
1
perl -pi -e 's/$\\displaystyle({.*)}\$/\\mymath$1}/g' *.tex 

如果倍數} $是在同一行,你需要一個非貪婪版本:

perl -pi -e 's/$\\displaystyle({.*?)}\$/\\mymath$1}/g' *.tex 
+0

不需要'{'需要在Perl中轉義?由於'。*'貪婪,它匹配'$ \ displaystyle {'和'} $'的最後一個匹配項:你確定這是正確的嗎?以'... $ \ displaystyle {foo} $ ... $ \ displaystyle {bar} $ ...'爲例。 – 2010-01-27 14:37:32

+0

在正則表達式中似乎沒有必要。嘗試了上面的表達並且工作。 – bertolami 2010-01-27 14:38:29

+0

啊,好的。我並不十分熟悉Perl,在大多數我認識的正則表達式實現中,他們確實需要轉義。謝謝(你的)信息。 – 2010-01-27 14:40:49

4

使用正則表達式,因爲理論上的答案是做這種類型的替代 的時候要非常小心, 正則表達式是無法匹配的這種類型的模式。

REGEX是一個有限狀態機;它不包含下推堆棧,所以 它不能與嵌套結構一起工作,如「{... math goes here ...}」,如果 有任何嵌套的可能性,例如「{more math} $」 可以作爲「數學走到這裏」字符串的一部分出現。您至少需要一個 上下文無關語法來描述這種類型的構造 - 一個狀態機 只是不會削減它!

現在話說回來,你仍然可以拉動這一關使用正則表達式 提供您的無「數學放在這裏」的字符串比 什麼一個狀態機可以處理更復雜。

給它一個鏡頭....但要小心結果!

+0

儘管這些正則表達式很難構建,但你可以考慮固定數量的嵌套'{...}'。考慮2個嵌套括號甚至讓我頭暈目眩!還要注意一些正則表達式引擎(.NET,PHP和Perl)有能力匹配他們自己的模式,或者匹配他們自己的模式(*可以*處理遞歸)。大多數正則表達式實現在數學/嚴格意義上不能稱爲「規則」。儘管如此,在這種情況下使用正則表達式可能不是這裏最好的選擇! +1 – 2010-01-27 15:05:14

+0

@NealB;)你的電腦也是一臺狀態機,不是嗎?我不同意正則表達式不是一個好的選擇。在我看來,這是一個非常合理的選擇,可以匹配99%的案例。分析整個東西的努力可能遠高於修復其餘的1% – bertolami 2010-01-27 15:06:01

+0

請注意,亞歷克斯有「成千上萬」這些東西要取代。在這種情況下,只有1%的* do *嵌套'{...}'可能是底部的痛苦! :) – 2010-01-27 15:16:26