Regular-Expression

如何在 Geany 文本編輯器中查找和刪除某個正則表達式?

  • May 22, 2020

我有這樣的範例文本:

\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{

然後點擊“替換”對話框中的“選擇中”按鈕。

引用自:https://unix.stackexchange.com/questions/284221