У меня есть пример текста, например такой:
\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{}
тегами, охватывающими несколько строк, этот метод не заменит текст должным образом. Лучшим вариантом может быть сначала найти эти экземпляры и либо изменить их вручную, либо убедиться, что они не охватывают несколько строк.
Это должно работать со многими редакторами, которые предлагают поиск/замену с помощью регулярных выражений, хотя детали параметров диалога, конечно, будут отличаться. Я тестировал это на TextWrangler для Mac OS X.
Замена только в выборе
Выберите 8 пронумерованных строк. Поиск:
\\stylea{
И замените на:
\\styleb{
Затем нажмите кнопку «В выделенном» в диалоговом окне «Заменить».