Использование регулярного выражения в LibreOffice Writer для добавления строки к следующей строке приводит к сбою или полной замене - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь отформатировать серию тестовых вопросов для внедрения в онлайн-курс в LibreOffice Writer. Формат тестового вопроса был недавно изменен, и мне нужно обновить все 500+ вопросов в текстовом файле перед реализацией.

Вопросы в настоящее время выглядят так:

1. alter verb (awl-ter) 
to change; become different or modified
■Example: The design of the king’s suit was altered to suit his taste.
□Note: Can be confused with altar , alter. 

нам нужно изменить формат выглядит следующим образом:

Word: alter verb (awl-ter) 
Definition: to change, become different or modified 
Example: The design of the king’s suit was altered to suit his taste. 
Possible Exam Question: Can be confused with altar , alter. 

Я знаю достаточно регулярных выражений, чтобы можно было автоматически форматировать большинство строк, за исключением строки определения. Мне особенно нужно добавить слово «Определение:» в начало строки сразу после строки «Слово», но я не могу понять, как это сделать правильно.

Я пытался использовать (\b\d+\.\s\w.*[\r\n]) который может найти первую строку каждой группы определений (как показано выше) и до новой строки / возврата - однако, при попытке добавить текст, используя $1Definition:, который согласно файлу помощи регулярного выражения Writer должен сохранить исходные результаты и добавьте все, что следует после «$ 1», он либо заменит один раз и больше никогда не будет работать с последующими щелчками «заменить», либо заменит все буквальной строкой $1Definition:, если используется кнопка «заменить все» ...

Я добавил экранную копию функции поиска , выделяющую строку . Похоже, что поиск действительно находит то, что я ищу, и подсвечивает первую строку каждого набора при нажатии «найти все».

Проблема возникает (как упоминалось выше) при попытке нажмите «заменить» более одного раза или нажмите «заменить все» .

В настоящее время я в растерянности относительно того, в чем заключается проблема / как решить эту проблему. Похоже, что мой Regex как-то портит поисковый запрос и вывод.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Способ сделать это с помощью LibreOffice - расширение AltSearch . Он предназначен для обработки регулярных выражений с разрывами строк и абзацев.

Search for: (\b\d+\.\s\w.*)$
Replace: \1\nDefinition: 

Затем нажмите Заменить все .

alt find and replace - replaced 3 times

Когда я попробовал, Только текущий выбор был отмечен по умолчанию, поэтому вам может потребоваться снять этот флажок. Кроме того, я обнаружил, что $ работает, но \p может использоваться для соответствия разрыву абзаца.

0 голосов
/ 11 апреля 2020

Согласно комментариям, запишите это как ответ.

Для данного вопроса о том, как изменить ...

1. alter verb (awl-ter) 
to change; become different or modified
■Example: The design of the king’s suit was altered to suit his taste.
□Note: Can be confused with altar , alter. 

Кому (добавить «Определение:» к вторая строка):

1. alter verb (awl-ter) 
Definition: to change; become different or modified
■Example: The design of the king’s suit was altered to suit his taste.
□Note: Can be confused with altar , alter. 

... хотя регулярное выражение LibreOffice Writer не похоже на многострочные совпадения, вы можете использовать другой редактор, например VSCode ...

enter image description here

Или скобки (Google Brackets.io) ...

Перед заменой:

enter image description here

После:

enter image description here

Если вы решили использовать другой редактор, попробуйте регулярное выражение ...

(^.*?)([.|\n]+■Example:)

И замените на .. .

Definition: $1$2

Надеюсь, это поможет.

...