Как найти и заменить перед матчем?

У меня есть данные с разделителями-запятыми, такие как 12345,6789,567890. Я хотел бы найти 3 цифры перед первой запятой и поставить запятую там, где они начинаются. Учитывая приведенную выше запись, я хочу найти 3 цифры перед первой запятой, это будет 345, и преобразовать запись «12345» в «12 345».

Что такое регулярное выражение, чтобы найти 3 цифры до первой запятой и как поставить запятую перед этими 3 цифрами. Я использую вим.

Зачем помечать perl?

choroba 22.05.2019 16:55

(1) Это изменяет ваши данные - тогда эта строка будет иметь шесть полей (если вы вставите запятую, а не, скажем, точку). Это то, что вы хотите? (2) Что делать, если число длиннее 6 цифр: вы продолжаете, ставя две запятые?

zdim 23.05.2019 08:06
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
2
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для того, чтобы найти и заменить вам нужно захватить группы. Регулярное выражение, которое позволяет вам это сделать:

(\d{3},)([\d,]*)

Но чтобы иметь возможность использовать его для поиска и замены в vim, вам нужна простая модификация, поскольку для этого требуется пропустить первую фигурную скобку квантификатора. Затем вы можете просто вставить кому перед всем матчем. Вы можете использовать непосредственно следующее утверждение в vim:

.s/\d\{3},[\d,]*/,\0/

В качестве краткого пояснения, \d\{3}, позволяет точно сопоставить три предыдущие цифры перед первой запятой и запятой. Затем остальная часть регулярного выражения позволяет вам захватить конечную часть. Наконец, в vim,\0 позволяет поставить запятую непосредственно перед полным совпадением.

Вы пометили perl, поэтому вы можете сделать:

echo '12345,6789,567890' | perl -pe 's/^[^,]*\K(?=\d{3},)/,/'
12,345,6789,567890

Объяснение:

^               # beginning of line
  [^,]*         # 0 or more any character but comma
  \K            # forget all we have seen until this position
  (?=           # positive lookahead, make sure we have after:
    \d{3}       # 3 digits
    ,           # a comma
  )             # end lookahead

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