В LibreOffice Writer я хочу использовать регулярные выражения для поиска всех слов, начинающихся с буквы c, и замены их на себя и другое слово.

Для первой части я использую следующее, и все в порядке.

\bc[a-z]+

Тем не менее, для замены части, когда я пишу

& text

он заменяет cat на & text вместо cat text .

Что я делаю неправильно?

2 ответа2

1

Другие ответы почти поняли это правильно. Выражение поиска правильное:

\b(c[a-z]*)\b

Я использовал * вместо + , чтобы сопоставить c как одно слово, и добавил конечный \b чтобы сделать ограничения слов более понятными, но исходная форма в порядке.

Строка замены должна быть:

$1 text

Это согласуется со ссылкой на документацию Джима К, но это довольно запутанно в этой области.

В частности, \1 можно использовать в поисковом выражении, чтобы повторить строку, ранее найденную в выражении, но $1 необходимо использовать в замещающей строке. Использование в строке поиска означает, что (a.b).*\1 будет сопоставлять a и b с символом между ними, а затем a и b с тем же символом между ними. Это не то же самое, что a.b.*a.b , где промежуточные символы могут отличаться. Пример в ссылке на документацию верен, но ничего не объясняет, где он будет полезен.

И последнее замечание: моя версия 5.1.4.2 LibreOffice Writer отказывается делать подстановки, когда строка поиска начинается с \b , хотя она находит все экземпляры правильно; трейлинг \b работает как положено. Это ошибка - OpenOffice 4.1.3 работает правильно. Обходной путь должен использовать ([^a-z]\bc[a-z]*)\b в качестве строки поиска с той же строкой замены: это работает во всех случаях, кроме случаев, когда первое слово документа начинается с c .

0

В выражении "find" отсутствуют скобки для ввода слова.

\b(c[a-z]+)

Выражение "заменить" правильно, как есть.

Документация: https://help.libreoffice.org/Common/List_of_Regular_Expressions

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .