2017-07-17 40 views
0

我想修改一些LaTeX Beamer代碼,並且想要做一個快速的正則表達式找到定義代碼塊的特定模式。例如,在匹配非常具體的打開和關閉括號

\only{ 
     \begin{equation*} 
      \psi_{w}(B)(1-B)^{d}y_{t,w} = x^{T}_{t,w}\gamma_{w} + \eta_{w}(B)z_{t,w}, 
      \label{eq:gen_arima} 
     \end{equation*} 
    } 

我想匹配只是\only{和最終},並且不出意外,將其刪除。這甚至可能嗎?

回答

1

I want to remove \only{ and }, and keep everything within it


在一個PCRE(PHP),Perl中,記事本+ +,它的完成這樣的:

對於如此簡單的東西,你需要的是
查找\\only\s*({((?:[^{}]++|(?1))*)})
更換$2

https://regex101.com/r/U3QxGa/1

說明

\\ only \s* 
(       # (1 start) 
     { 
     (       # (2 start), Inner core to keep 
      (?:       # Cluster group 
       [^{}]++      # Possesive, not {} 
      |        # or, 
       (?1)       # Recurse to group 1 
      )*       # End cluster, do 0 to many times 
    )        # (2 end) 
     } 
)        # (1 end) 
+0

這太棒了!但是你也許誤解了我的問題。我想要你的正則表達式產生的選擇的確切反例。我想刪除'\ only {'和'}',並將其中的所有內容保存下來。 – Kartik

+0

@Kartik - 對不起。我已更新答案來解決您的問題。 – sln

+0

太棒了!謝謝! – Kartik

2

的正則表達式不能指望,在這個著名的表達得如此回答:RegEx match open tags except XHTML self-contained tags

另外,乳膠本身有一個相當複雜的語法(即宏展開?)。理想情況下,你會使用某種解析器,但也許這有點矯枉過正。如果你正在尋找一個非常簡單,快速和骯髒的劈將只對某一類的輸入工作,您可以:

  • 搜索\only
  • 每當您看到{時每增加一個counter,並在每次看到}時將其遞減。如果在{之前有\,請忽略它。 (如果您尋找奇數\,請選擇花式點。)
  • counter變爲0時,您發現關閉}

再次,這是不可靠

+1

我害怕有人會這麼說。我想我會在bash中一起破解一些東西......感謝您的確認和洞察! – Kartik