2014-03-04 54 views
1

我在LaTeX的編輯一本書,它的引號的語法是從簡單"字符不同。所以我想"quoted text here"轉換爲``quoted text here''更改`「`引號乳膠風格

我有50個文字有很多報價文件裏面。我試着寫一個正則表達式來替代第一"``和第二"'',但我失敗了。我搜索互聯網上,問了一些朋友,但我沒有成功的。在最近我用第一個引號取代的是

s/"[a-z]/``/g 

但是這顯然是錯誤的,因爲

"quoted text here" 

將成爲

``uoted text here" 

我怎樣才能解決我的問題?

+0

我對你的方法有點困惑。不應該用's /''''''[az]/g'來反過來嗎?但是,我認爲它會更好:'s \'''(。*?)'' /「\ 1」/ g' – Jerry

+0

@Jerry轉換是從「..」到「'..」 –

+0

我認爲有些人(包括我)感到困惑的原因是因爲您沒有使用內聯代碼格式(反引號)在問題中。在等寬字體中,很容易看到最後的「引號」實際上是兩個撇號(''''),但我看到的只是'''。 –

回答

0

,嘗試按字:

sed 's/"\([a-z]\)/``\1/' 

在我的電腦:

[email protected]:~$ echo \"hello\" | sed 's/"\([a-z]\)/``\1/' 
``hello" 
3

我有點困惑你的方法。難道這不是與s/``/"[a-z]/g相反嗎?不過,我認爲這將是更好的:

s/``(.*?)''/"\1"/g 

(.*?)捕捉``''之間有什麼。

\1包含此捕獲。


如果那就是你要找的(即我錯誤地解釋你的問題)相反,那麼我建議這樣的:

s/"(.*?)"/``\1''/g 

同樣的原理與前面的正則表達式其中一期工程。

1

使用以下解決多個報價,一步到位替換所有"

echo '"Quote" she said, "again."' | sed "s/\"\([^\"]*\)\"/\`\`\1''/g" 

[^\"]*避免了需要ungreedy匹配,which does not seem possible in sed

+0

在處理轉義的'''或其他出現'''的時候要小心,這些並不意味着用引號引起來,比如在「引用」中,她說「再次」。「這些是派對狂。 –

0

這取決於你的輸入文件一點點(總是成對報價,或能有ommissions?)。我建議以下可靠的方法:

sed 's/"\([0-9a-zA-Z]\)/``\1/g' 
sed "s/\([0-9a-zA-Z]\)\"/\1\'\'/g" 

假設:左引號總是緊跟着一個字母或數字,右引號由一個preceeded。報價可以跨越幾個單詞甚至幾條輸入行(當發生這種情況時,其他一些解決方案不起作用)。

請注意,我也替換了結束引號:根據您使用的雙引號的字體可以排版爲中性直引號。