替换为 Grep

替换为 Grep

我有一个这样的示例文本:

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

答案1

替换为 Grep

您可以通过正则表达式搜索/替换来完成(大部分)此操作。

使用“替换”对话框,确保选择“使用正则表达式”而不选择“使用多行匹配”。

搜索:

\\stylea{(.*)}

并替换为:

\1

这是对搜索表达式中“捕获”文本(括号内的部分)的正则表达式“反向引用”。如果您有多个捕获,您可以使用\1\2等引用它们。

但是,请记住,正则表达式存在限制,这可能会给您带来一些麻烦。有些行的文本内嵌套有大括号,例如:

\stylea{\# Date{\hspace*{1em}}{\hspace*{1em}}: May 19, 2016}

正则表达式不能(单独){}像这样计算和匹配嵌套分隔符 ( )。在您的情况下,这可能不会成为一个实际问题,因为(.*)捕获将在行尾之前匹配尽可能多的字符(“贪婪匹配”),这在您的示例文本中恰好做了正确的事情,因为每个\stylea{}标签都在一行上。如果您的文件确实\stylea{}包含跨多行的标签,则此方法将无法正确替换文本。您最好的选择可能是首先找到这些实例,然后手动更改它们或确保它们不会跨越多行。

这应该适用于许多提供正则表达式搜索/替换的编辑器,尽管对话框选项的详细信息当然会有所不同。我在 Mac OS X 的 TextWrangler 上进行了测试。

仅在选择时替换

选择 8 条编号的行。搜索:

\\stylea{

并替换为:

\\styleb{

然后单击“替换”对话框中的“在选择中”按钮。

相关内容