Я работаю над запросом, в котором мне нужно проанализировать поле описания, которое соответствует шаблону «userid-date-amount-». Например, допустимое значение будет: 222826-2022/07/26-32,700,000-
Однако моя текущая реализация также извлекает значения, подобные следующим:
Tracking code: 1160685022- Date: 2022/07/26- Time: 21:02- Last 4 digits: None- First 4 digits: None- Amount: 350 thousand Dollars- To Paypal
Я хочу изменить свою логику синтаксического анализа, чтобы учитывать только значения, которые строго соответствуют формату «userid-date-amount-».
SELECT
i."Id",
i."Description",
unnest(regexp_matches(i."Description", '(\d+)-(.*?)-(.*)-')) AS extracted_data
FROM "public"."Invoices" i
Мне также нужно разбить исходное значение на три отдельных поля, например: 222826, 2022/07/26 и 32 700 000.
Вы можете сделать шаблон более конкретным и сопоставить дату с шаблоном, используя цифры и косые черты.
Для суммы вы можете начать с одной цифры и сопоставить необязательные цифры или запятые (или даже сделать эту часть более конкретной в соответствии с разрешенным форматом).
(\d+)-(\d{4}/\d\d/\d\d)-(\d[\d,]*)-
Посмотрите демонстрацию регулярных выражений
Если ведущие цифры не должны частично совпадать со словом, вы можете начать с границы слова \y(\d+)
мерси, а насчет второй части? разбить исходное значение на три отдельных поля?
@sci9 Вы имеете в виду, например, следующее: onecompiler.com/postgresql/42k22qwqz
да, это именно то, что я ищу
Так?
(\d+)-(\d{4}/\d\d/\d\d)-(\d[\d,]*)-
regex101.com/r/mtasX7/1