Удаление всех слов, кроме первой буквы, с помощью регулярного выражения в LibreOffice Writer

Я нашел в Интернете и здесь пару сообщений о том, как удалить все слова в абзаце (или весь текст), кроме первой буквы, с помощью регулярных выражений и Microsoft Word, но в LibreOffice Writer ничего не помогло.

Я пытался использовать диалоговое окно «Найти и заменить» и проверить регулярные выражения в параметрах.

В качестве примера:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut Labore et dolore magna aliqua.

Стало бы:

L i d s a, ca e, s d e t i u l e d ma.

Было бы здорово сохранить пунктуацию и чувствительность к регистру. Я также не против использования для этого другого метода/программы.

Решения Flash и Тима работают, но хотя мне нравятся регулярные выражения, которые заменяют совпадения пустыми строками (ответ Тима), решение Flash кажется более эффективным: 114 шагов против 452 для тестовой строки.

Cary Swoveland 31.08.2024 08:59

@CarySwoveland кажется, что собственная находка @mordock даже лучше: \B[a-z]+ или \B\w+ будет 75 шагов или 76 шагов (не знаю, в чем разница)

jhnc 31.08.2024 09:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте функцию «Найти и заменить» и установите флажок regex (Regular expressions).

Искать: \b(\w)\w+, заменить на: $1

  • \b — это привязка границы слова, которая гарантирует, что совпадение начинается с начала слова.
  • (\w) захватывает первую букву слова и помещает ее в первую группу
  • \w+ соответствует остальной части слова, которая будет заменена.
  • $1 в поле замены вставляет первую захваченную группу (в нашем случае первую букву).

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

Mordork 31.08.2024 07:52

Странный. В моем случае работает. Но тогда ты мог бы попробовать (\b\w)\w*.

Flash Thunder 31.08.2024 07:55
Ответ принят как подходящий

Предполагая, что регулярные выражения LibreOffice поддерживают просмотры фиксированной ширины, вы можете сопоставить их по следующему шаблону:

(?<=\w)\w

а затем замените пустой строкой. Этот шаблон будет соответствовать любому символу слова, за исключением тех, которым не предшествуют символы слова (например, в начале слова).

Вот работающая демо.p

Редактировать:

Как предложено в комментариях, мы можем оптимизировать шаблон, чтобы:

(?<=\w)\w+

Это позволит сопоставить целые подслова за один раз, уменьшив количество шагов замены.

libreoffice поддерживает это. (?<=\w)\w+ может быть более эффективным.

jhnc 31.08.2024 07:47

Да, это сработало. Есть пара проблем с форматированием чисел и тому подобного, но у меня нет проблем с их исправлением вручную. Кроме того, \B[a-z], похоже, дает те же результаты, о которых я только что узнал и собирался обновить свой вопрос этой информацией. Спасибо!

Mordork 31.08.2024 07:57

В дополнение к предложению @jhnc для тестовой строки видно, что замена \w на \w+ уменьшает количество совпадений с 83 до 19 и количество шагов с 452 до 132.

Cary Swoveland 31.08.2024 09:11

Другие вопросы по теме

Похожие вопросы

Почему некоторые функции регулярных выражений возвращают объект соответствия, а некоторые нет?
Регулярное выражение для проверки того, содержит ли ввод две заданные строки, а часть между ними не содержит ни одного элемента из набора указанных строк
Regex: сопоставить кратчайший шаблон между двумя возможными разделителями
Использованиеdependent_wider_regex для создания новой строки для каждого совпадения в R
Добавить новые строки перед выбранными символами дефиса
Написание Regex для обработки дополнительных символов с плавающей запятой в начале строки?
Как извлечь из строки только уникальные значения, используя регулярное выражение в Python?
Регулярное выражение для соответствия таким символам, как ┼, ▓, ┐, ╔, ╠, ═, ╩, �
DotNet эквивалент Java Matcher.hitEnd()
Использование регулярного выражения для разделения подразделов с уникальными заголовками