Regular-Expression
如何在 Geany 文本編輯器中查找和刪除某個正則表達式?
我有這樣的範例文本:
\documentclass[a4paper]{article} \usepackage[a4paper,margin=2cm]{geometry} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{color} \setlength{\parindent}{0em} \setlength{\parskip}{2ex plus1ex minus0.5ex} \newcommand{\stylea}[1]{\noindent{\textcolor[rgb]{0.9, 0.9, 0.8}{\fcolorbox[rgb]{0, 0, 0}{0.2, 0.2, 0.2}{#1}}}} \begin{document} \ttfamily \setlength{\fboxrule}{0pt} \setlength{\fboxsep}{0pt} 1 \stylea{\# Author{\hspace*{1em}}: Bhishan Poudel} \\ 2 \stylea{\# Date{\hspace*{1em}}{\hspace*{1em}}: May 19, 2016} \\ 3 \stylea{} \\ 4 \stylea{Line wrapping in geany} \\ 5 \stylea{===============================================================================} \\ 6 \stylea{edit > preference > editor > features > line wrapping} \\ 7 \stylea{then,} \\ 8 \stylea{document > line wrapping} \\ \end{document}
我想刪除所有單詞 \stylea{ },保持 {} 內的單詞完整。
我知道我可以找到並替換 \stylea{ 並用空格替換,但我什至不想要空格,還想同時刪除右大括號 }。
我們也可以只替換 Geany 中選定塊中的單詞嗎?例如,如果我選擇第 1 到第 8 行,並將 stylea 替換為 styleb?
替換為 grep
您可以(大部分)使用正則表達式搜尋/替換來完成此操作。
使用替換對話框,確保選擇了“使用正則表達式”並且沒有選擇“使用多行匹配”。
搜尋:
\\stylea{(.*)}
並替換為:
\1
這是搜尋表達式(括號內的部分)中“擷取”文本的正則表達式“反向引用”。
\1
如果您有多個擷取,您可以使用、\2
等來引用它們。但是,請記住,正則表達式有一個限制,這可能會讓您有些不快。您有一些行在文本中嵌套了花括號,例如:
\stylea{\# Date{\hspace*{1em}}{\hspace*{1em}}: May 19, 2016}
正則表達式不能(自己
{}
)像這樣計算和匹配嵌套分隔符 ( )。在您的情況下,這可能不會成為一個實際問題,因為(.*)
擷取將在行尾之前匹配盡可能多的字元(“貪婪匹配”),這在您的範例文本中恰好做了正確的事情,因為每個\stylea{}
標籤都在一行上。如果您確實有\stylea{}
標籤跨越多行的文件,則此方法將無法正確替換文本。您最好的選擇可能是首先找到這些實例,然後手動更改它們或確保它們不跨越多行。這應該適用於許多提供正則表達式搜尋/替換的編輯器,儘管對話框選項的細節當然會有所不同。我在 Mac OS X 的 TextWrangler 上對其進行了測試。
僅在選擇中替換
選擇 8 個編號的行。搜尋:
\\stylea{
並替換為:
\\styleb{
然後點擊“替換”對話框中的“選擇中”按鈕。