我有一个这样的示例文本:
\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{
然后单击“替换”对话框中的“在选择中”按钮。