Необходимо написать регулярное выражение + код (или псевдокод) для извлечения нужных значений.
Текст:
Karta *0123: Pokupka 1000 RUB data 21.08.2015 12:12:12 mesto Starbucks
Значения:
- Номер карты
- Сумма транзакции
- Валюта транзакции
- Дата транзакции
- Время транзакции
- Место совершения транзакции
Воспольуемся функционалом, который предоставляет Oracle для работы с регулярными выражениями(REGEXP).
Извлекаем необходимые данные:
WITH w AS (SELECT 'Karta' AS literal FROM dual UNION ALL SELECT 'Pokupka' FROM dual UNION ALL SELECT 'data' FROM dual UNION ALL SELECT 'mesto' FROM dual) SELECT t.str FROM (SELECT regexp_substr(str, '[^ ]+', 1, level) str FROM (SELECT 'Karta *0123: Pokupka 1000 RUB data 21.08.2015 12:12:12 mesto Starbucks' str FROM dual) str CONNECT BY regexp_instr(str, ' ', 1, level - 1) > 0) t minus select w.literal from w; /
Результат:
"STR" "*0123:" "1000" "12:12:12" "21.08.2015" "RUB" "Starbucks"
Вариант на C#:
using System; namespace ConsoleAppRegex { class Program { /// <summary> /// /// </summary> /// <param name="args"></param> /// static void Main(string[] args) { string s = "Karta *0123: Pokupka 1000 RUB data 21.08.2015 12:12:12 mesto Starbucks"; string[] strarr = s.Split(new string[] { "Karta", "Pokupka", "data", "mesto" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < strarr.Length; i++) { if (i == 1) { string[] array = strarr[i].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); for (int j = 0; j < array.Length; j++) { Console.WriteLine(array[j].Trim()); } } else Console.WriteLine(strarr[i].Trim().TrimEnd(':')); } } } }
P.S.
Конфигурация СУБД — Oracle Database 11g Express Edition Release 11.2.0.2.0
IDE — PL/SQL Developer Version 11.0.6.1776
Tags: Oracle, REGEXP, REGEXP_SUBSTR, SQL